如何让java日历从星期一开始工作日?

时间:2015-01-19 09:15:37

标签: java calendar

我编写了代码,它使用Java日历并从时间戳显示DAY_OF_WEEK。但默认日历从星期日(1)开始。我希望它从周一开始,例如。周一应该返回1。这是我的代码:

Calender c = Calender.getInstance(TimeZone.getInstance("Australia/Sydney"));
c.setTimeInMillis(1413831601032L);
c.setFirstDayOfWeek(Calender.Monday);
System.out.println(c.get(c.DAY_OF_WEEK));
在这种情况下,

setFirstDayOfWeek()没有帮助。

Tueday的输出应为2,但它显示我3.任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:5)

一周的第一天来自当前的区域设置。如果您未设置日历(Calendar.getInstance(Locale)或新GregorianCalendar(Locale))的区域设置,则会使用系统的默认设置。

public static void main(String[] args) {
    Calendar c = new GregorianCalendar();
    System.out.println(Locale.getDefault() + ": " + c.getFirstDayOfWeek());
}

这应显示具有不同语言/国家/地区的JVM参数的不同输出:

-Duser.language=en -Duser.country=US -> en_US: 1 (Sunday)
-Duser.language=en -Duser.country=GB -> en_GB: 2 (Monday)

此外,您可以使用setFirstDayOfWeek()方法设置一周的第一天。该方法只能影响return values of WEEK_OF_MONTHWEEK_OF_YEAR。 F 或DAY_OF_WEEK,它什么都不做

请参阅here了解更多

另外,如果您看到Calendar.java,您会看到天数的值不变,如下所示。因此,无论本周的第一天是什么,它都将为MONDAY返回1。

  

public final static int SUNDAY = 1;

     

public final static int MONDAY = 2;   ....

     

public final static int SATURDAY = 7;

根据您设置的第一天,您可以执行以下操作并操纵数据。

[c.get(Calendar.DAY_OF_WEEK) - 1]);

答案 1 :(得分:0)

尽量避免使用get返回的原始值。在您的代码中,您应该始终对Calendar类中定义的常量进行检查。这具有更大的可读性。

请考虑以下摘要

这里很难找到你想要做哪一天的哪一天

switch (c.get(Calendar.DAY_OF_WEEK)) {
    case 2: 
        // do something
        ; break;
    case 3: 
        // do something
        break;

}

这个例子更加自我解释

switch (c.get(Calendar.DAY_OF_WEEK)) {
    case Calendar.MONDAY: 
        // do something
        ; break;
    case Calendar.TUESDAY: 
        // do something
        break;

}