【问题标题】:Android: how to get the current day of the week (Monday, etc...) in the user's language?Android:如何以用户的语言获取当前的星期几(星期一等)?
【发布时间】:2011-11-30 20:40:35
【问题描述】:

我想知道当前的星期几(星期一、星期二...),用用户的本地语言表示。例如,“Lundi”“Mardi”等……如果用户是法国人。

我读过这篇文章,但它只返回一个 int,而不是用户语言的字符串:What is the easiest way to get the current day of the week in Android?

更一般地说,如何以用户的语言编写一周中的所有日子和一年中的所有月份?

我认为这是可能的,例如 Google 议程以用户的当地语言给出了日期和月份。

【问题讨论】:

    标签: java android date localization internationalization


    【解决方案1】:

    使用SimpleDateFormat 将日期和时间格式化为人类可读的字符串,根据用户的区域设置。

    获取当前星期几的小例子(例如“星期一”)

    SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
    Date d = new Date();
    String dayOfTheWeek = sdf.format(d);
    

    【讨论】:

      【解决方案2】:

      试试这个:

      int dayOfWeek = date.get(Calendar.DAY_OF_WEEK);  
      String weekday = new DateFormatSymbols().getShortWeekdays()[dayOfWeek];
      

      【讨论】:

      • 嗨,如果您使用的是短工作日,它只显示一个字母。但我需要显示一天中的前 3 个字母
      • 请注意,要访问所有可用的语言环境,应该使用DateFormatSymbols.getInstance()(尽管现在它可能会给出相同的结果)。
      【解决方案3】:

      我知道已经回答但谁在寻找这样的'Fri'

      周五-

      SimpleDateFormat sdf = new SimpleDateFormat("EEE");
      Date d = new Date();
      String dayOfTheWeek = sdf.format(d);
      

      谁想要完整的日期字符串,他们可以使用 4E 表示 Frid​​ay

      周五-

      SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
      Date d = new Date();
      String dayOfTheWeek = sdf.format(d);
      

      享受...

      【讨论】:

      • 我在你的第二行收到一个错误,说构造函数日期未定义。
      【解决方案4】:

      为了让事情更短你可以使用这个:

      android.text.format.DateFormat.format("EEEE", date);
      

      它将以字符串形式返回星期几。

      【讨论】:

        【解决方案5】:

        我用来获取日期名称的是她的(0-6 表示 monday - sunday):

        public static String getFullDayName(int day) {
            Calendar c = Calendar.getInstance();
            // date doesn't matter - it has to be a Monday
            // I new that first August 2011 is one ;-)
            c.set(2011, 7, 1, 0, 0, 0);
            c.add(Calendar.DAY_OF_MONTH, day);
            return String.format("%tA", c);
        }
        
        public static String getShortDayName(int day) {
            Calendar c = Calendar.getInstance();
            c.set(2011, 7, 1, 0, 0, 0);
            c.add(Calendar.DAY_OF_MONTH, day);
            return String.format("%ta", c);
        }
        

        【讨论】:

          【解决方案6】:

          tl;博士

          String output = 
              LocalDate.now( ZoneId.of( "America/Montreal" ) )
                       .getDayOfWeek()
                       .getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;
          

          java.time

          Java 8 及更高版本以及back-ported to Java 6 & 7to Android 中内置的java.time 类包括方便的DayOfWeek 枚举。

          根据标准 ISO 8601 定义对天数进行编号,1-7 表示周一至周日。

          DayOfWeek dow = DayOfWeek.of( 1 );
          

          此枚举包含getDisplayName 方法,用于生成本地化翻译日期的字符串。

          Locale 对象指定用于翻译的人类语言,并指定文化规范以决定大小写和标点符号等问题。

          String output = DayOfWeek.MONDAY.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;
          

          要获取今天的日期,请使用 LocalDate 类。请注意,时区至关重要,因为对于任何给定时刻,日期在全球范围内都会变化。

          ZoneId z = ZoneId.of( "America/Montreal" );
          LocalDate today = LocalDate.now( z );
          DayOfWeek dow = today.getDayOfWeek();
          String output = dow.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ;
          

          请记住,语言环境与时区无关。两个独立的不同正交问题。您可能想要在印度 (Asia/Kolkata) 的日期时间区域的法语演示文稿。

          乔达时间

          更新:Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

          Joda-Time 库提供 Locale 驱动的日期时间值本地化。

          DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
          DateTime now = DateTime.now( zone );
          
          Locale locale = Locale.CANADA_FRENCH;
          DateTimeFormatter formatterUnJourQuébécois = DateTimeFormat.forPattern( "EEEE" ).withLocale( locale );
          
          String output = formatterUnJourQuébécois.print( now );
          
          System.out.println("output: " + output );
          

          输出:samedi


          关于java.time

          java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.DateCalendarSimpleDateFormat

          Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

          要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

          从哪里获得 java.time 类?

          【讨论】:

            【解决方案7】:

            试试这个...

            //global declaration
            private TextView timeUpdate;
            Calendar calendar;
            
            .......
            
            timeUpdate = (TextView) findViewById(R.id.timeUpdate); //initialize in onCreate()
            
            .......
            
            //in onStart()
            calendar = Calendar.getInstance();
            //date format is:  "Date-Month-Year Hour:Minutes am/pm"
            SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy HH:mm a"); //Date and time
            String currentDate = sdf.format(calendar.getTime());
            
            //Day of Name in full form like,"Saturday", or if you need the first three characters you have to put "EEE" in the date format and your result will be "Sat".
            SimpleDateFormat sdf_ = new SimpleDateFormat("EEEE"); 
            Date date = new Date();
            String dayName = sdf_.format(date);
            timeUpdate.setText("" + dayName + " " + currentDate + "");
            

            结果...

            【讨论】:

              【解决方案8】:

              抱歉回复晚了。但这会正常工作。

              daytext=(textview)findviewById(R.id.day);
              
              Calender c=Calender.getInstance();
              SimpleDateFormat sd=new SimpleDateFormat("EEEE");
              String dayofweek=sd.format(c.getTime());
              
              
              daytext.setText(dayofweek);
              

              【讨论】:

              • (1) 此解决方案已包含在 the accepted Answer 中。解释您的产品如何增加或删除更多价值。 (2) 这些类现在是遗留的,被 java.time 类所取代。
              【解决方案9】:

              我只是在 Kotlin 中使用这个解决方案:

               var date : String = DateFormat.format("EEEE dd-MMM-yyyy HH:mm a" , Date()) as String
              

              【讨论】:

                【解决方案10】:

                如果您使用的是 ThreetenABP 日期库 bt Jake Warthon,您可以这样做:

                dayOfWeek.getDisplayName(TextStyle.FULL, Locale.getDefault()
                

                在您的 dayOfWeek 实例上。更多信息: https://github.com/JakeWharton/ThreeTenABPhttps://www.threeten.org/threetenbp/apidocs/org/threeten/bp/format/TextStyle.html

                【讨论】:

                  【解决方案11】:
                  //selected date from calender
                  SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy"); //Date and time
                  String currentDate = sdf.format(myCalendar.getTime());
                  
                  //selcted_day name
                  SimpleDateFormat sdf_ = new SimpleDateFormat("EEEE");
                  String dayofweek=sdf_.format(myCalendar.getTime());
                  current_date.setText(currentDate);
                  lbl_current_date.setText(dayofweek);
                  
                  Log.e("dayname", dayofweek);
                  

                  【讨论】:

                  • 那是不可读的。而且您正在使用设计不佳的类和早已过时的SimpleDateFormatDateCalendar(也在问题中使用)。
                  猜你喜欢
                  • 1970-01-01
                  • 2017-11-07
                  • 2011-01-26
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-11-11
                  • 2016-10-22
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多