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



我写了代码,它使用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() 在这种情况下没有帮助。

星期二的输出应该是 2,但它显示的是 3。任何帮助将不胜感激。

一周的第一天派生自当前区域设置。如果未设置日历的区域设置(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,它什么都不做

请参阅此处了解更多信息

此外,如果您看到日历.java,您将看到天数的值是恒定的,如下所示。所以这就是为什么它将为星期一返回 1,无论一周的第一天设置为什么。

公共最终静态 int 星期日 = 1;

公共最终静态 int 星期一 = 2; ....

公共最终静态 int 星期六 = 7;

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

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

尽量避免使用 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;
}

相关内容

最新更新