【问题标题】:In Java, how to get strings of days of week (Sun, Mon, ..., Sat) with system's default Locale (language)在 Java 中,如何使用系统的默认语言环境(语言)获取星期几(Sun、Mon、...、Sat)的字符串
【发布时间】:2013-05-14 10:59:47
【问题描述】:

最简单的方法:

String[] namesOfDays = new String[7] {
    "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"
};

此方法不使用语言环境。因此,如果系统的语言不是英语,则此方法无法正常工作。

使用 Joda 时间,我们可以这样做:

String[] namesOfDays = new String[7];
LocalDate now = new LocalDate();

for (int i=0; i<7; i++) {
    /* DateTimeConstants.MONDAY = 1, TUESDAY = 2, ..., SUNDAY = 7 */
    namesOfDays[i] = now.withDayOfWeek((DateTimeConstants.SUNDAY + i - 1) % 7 + 1)
        .dayOfWeek().getAsShortText();
}

但是,此方法使用今天的日期和日历计算,这对于最终目的是无用的。另外,它有点复杂。

有没有一种简单的方法可以使用系统的默认语言环境获取 "Sun""Mon"、...、"Sat" 等字符串?

【问题讨论】:

标签: java android calendar jodatime dayofweek


【解决方案1】:

如果我没有误解你

 calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.US);

是您正在寻找的。 Here你可以找到文档,

或者你也可以使用,getShortWeekdays()

String[] namesOfDays = DateFormatSymbols.getInstance().getShortWeekdays()

【讨论】:

  • 有静态方法吗? Calendar.getDisplayName 也需要一个实例。
  • 我自己找到了答案。 String[] namesOfDays = DateFormatSymbols.getInstance().getShortWeekdays();将得到字符串数组。
  • 如果需要指定语言环境,可以使用DateFormatSymbols.getInstance(locale).getShortWeekdays()
  • 仅供参考,这些日期时间类在几年前被 JSR 310 中定义的 java.time 类所取代。
【解决方案2】:
Date now = new Date();
// EEE gives short day names, EEEE would be full length.
SimpleDateFormat dateFormat = new SimpleDateFormat("EEE", Locale.US); 
String asWeek = dateFormat.format(now);

您可以使用所需的日期和时间创建日期。并实现你想要的。

【讨论】:

    【解决方案3】:

    tl;博士

    DayOfWeek.MONDAY.getDisplayName( 
        TextStyle.SHORT , 
        Locale.getDefault() 
    )
    

    java.time

    Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。大部分 java.time 被反向移植到 Android(见下文)。

    DayOfWeek

    DayOfWeek 枚举定义了七个对象,一个用于一周中的每一天。该类提供了几个方便的方法,包括 getDisplayName 来生成具有本地化日期名称的字符串。

    要本地化,请指定:

    • TextStyle 确定字符串的长度或缩写。
    • Locale 确定 (a) 用于翻译日期名称、月份名称等的人类语言,以及 (b) 决定缩写、大写、标点符号、分隔符等问题的文化规范。

    例子:

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

    您可以使用 JVM 当前的默认时区,而不是指定一个。但请记住风险:在 JVM 中运行的任何应用程序的任何线程中的任何代码都可以随时更改默认区域。

    Locale locale = Locale.getDefault() ;
    String output = DayOfWeek.MONDAY.getDisplayName( TextStyle.SHORT , locale );
    

    关于java.time

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

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

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

    从哪里获得 java.time 类?

    【讨论】:

      【解决方案4】:

      如果没有 1.8,您可以使用 DateFormatSymbols(也适用于 Android)。

      DateFormatSymbols.getWeekdays()

      返回:工作日字符串。使用 Calendar.SUNDAY、Calendar.MONDAY、 等来索引结果数组。

      【讨论】:

        【解决方案5】:

        我认为我的代码很有用。您可以根据自己的目的轻松更改它。

        结果字符串数组为“Sat”、“Sun”、“Mon”、“Tue”、“Wed”、“Thu”和“Fri”。

            public String[] getNameOfDays(){
                SimpleDateFormat sdf_day_of_week = new SimpleDateFormat("EEE", Locale.getDefault());
                String[] nameOfDays = new String[7];
        
                Calendar calendar = Calendar.getInstance();
        
                for(int i=0; i<7; i++) {
                    calendar.set(Calendar.DAY_OF_WEEK, i);
                    nameOfDays[i] = sdf_day_of_week.format(calendar.getTime());
                }
        
                return nameOfDays;
            }
        

        【讨论】:

        • 请不要教年轻人使用早已过时且臭名昭著的SimpleDateFormat类。至少不是第一选择。而且不是没有任何保留。今天我们在java.time, the modern Java date and time API, 和它的DateTimeFormatter 中有很多更好的东西。是的,您可以在 Android 上使用它。对于较旧的 Android,请参阅 How to use ThreeTenABP in Android Project
        • @OleV.V.哦。不知道SimpleDateFormat等老的日期时间类很麻烦。谢谢你让我知道。
        【解决方案6】:
        public class daysOfWeek {
        
             public static String days(String s, int k) {
                 String[] days = new String[] {"Mon","Tue","Wed","Thu","Fri","Sat","Sun"};
                 int len = days.length;
                 int index = 0;
                 int result = 0;
                 for(int i=0; i<len; i++) {
                     if(days[i]==s) {
                        index =i;
                        k%=7;
                        result = (index +k)%7;
                     }
                    
                 }
                 return days[result];
             }
             
             public static void main(String args[]) {
                 String S ="Tue"; int k =25;
                 String s =days(S,k);
                 System.out.println(s);
             }
        
        }
        

        【讨论】:

          【解决方案7】:

          请试试这个

          public static String[] namesOfDays =  {"SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"};
          
          
           int day = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);
          
          System.out.println("Day := "+namesOfDays[day-1]);
          

          【讨论】:

          • 我想他想要本地化的日子。
          猜你喜欢
          • 2011-09-25
          • 1970-01-01
          • 1970-01-01
          • 2011-11-11
          • 1970-01-01
          • 2011-10-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多