在Java中,如何使用系统的默认语言环境(语言)获取星期几(星期日,星期一,...,星期六)的字符串

时间:2013-05-14 10:59:47

标签: java android calendar jodatime dayofweek

最简单的方法:

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

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

使用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"等字符串吗?

7 个答案:

答案 0 :(得分:46)

如果我没有误解你

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

正是您要找的。 Here您可以找到文档,

或者您也可以使用getShortWeekdays()

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

答案 1 :(得分:8)

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);

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

答案 2 :(得分:4)

TL;博士

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

java.time

现在位于Joda-Timemaintenance 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.DateCalendar和&amp; SimpleDateFormat

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

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?

答案 3 :(得分:0)

在没有1.8版本的情况下,您可以使用DateFormatSymbols(也适用于Android)。

DateFormatSymbols.getWeekdays()

  

返回:工作日字符串。使用Calendar.SUNDAY,Calendar.MONDAY,   等等,以对结果数组建立索引。

答案 4 :(得分:0)

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

结果字符串数组为“星期六”,“星期日”,“星期一”,“星期二”,“星期三”,“星期四”和“星期五”。

    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;
    }

答案 5 :(得分:0)

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);
     }

}

答案 6 :(得分:-1)

请试试这个

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]);