java 日历 setFirstDayOfWeek 不工作

标签 java calendar

这是现在的真实日历:

   March 2015       
Su Mo Tu We Th Fr Sa  
 1  2  3  4  5  6  7  
 8  9 10 11 12 13 14  
15 16 17 18 19 20 21  
22 23 24 25 26 27 28  
29 30 31   

我得到 DAY_OF_WEEK of 2015/3/24 这样:

public class TestCalendar {
    public static void main(String[] argvs){
        Calendar cal = Calendar.getInstance();
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        cal.set(2015,Calendar.MARCH,24);
        System.out.println(cal.get(Calendar.DAY_OF_WEEK));
    }
}

因为我将 cal.setFirstDayOfWeek 设置为 MONDAY,所以我期望的结果是 2,但是无论哪一天我设置为 first星期几(已经尝试过 SUNDAY 和其他)。它一直向我显示相同的结果,即 3。所以看起来 firstDayOfWeek 不会影响结果。

我做错了什么吗?


编辑

我刚刚想到并感谢下面的答案,这个 setFirstDayOfWeek 不会影响 get(Calendar.DAY_OF_WEEK) 的结果,也不会影响 get(Calendar.WEEK_OF_YEAR )

那么setFirstDayOfWeek()这个方法是用来做什么的呢? 我的意思是如何告诉程序我希望 2015/3/29 成为第 12 周的最后一天,而不是将其视为第 13 周的第一天?

最佳答案

tl;dr

LocalDate.of( 2015 , Month.MARCH , 24 )  // `LocalDate` object for 2015-03-24.
         .getDayOfWeek()                 // DayOfWeek.TUESDAY constant object
         .getValue()                     // 2

避免遗留日期时间类

Calendar 是一团糟,它的兄弟类也是如此。幸运的是,这些旧的日期时间类现在已经遗留,被 java.time 类所取代。

ISO 8601

如果您希望星期一作为一周的第一天,星期日作为最后一天,编号为 1-7,则使用 ISO 8601 java.time 类中默认使用的日历。

星期几

DayOfWeek枚举为一周中的每个 ISO 天保留预定义对象。如果需要,您可以询问它的编号,但通常传递此枚举的对象比传递整数更好。

本地日期

LocalDate类表示没有时间和时区的纯日期值。

LocalDate ld = LocalDate.of( 2015 , Month.MARCH , 24 );
DayOfWeek dow = ld.getDayOfWeek();
int value = dow.getValue(); // 1-7 for Monday-Sunday. But often better to use the `DayOfWeek` object rather than a mere integer number.

要处理星期一不是第一天的一周的其他定义,请参阅 WeekFields类。


关于java.time

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

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

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

从哪里获得 java.time 类?

ThreeTen-Extra项目用附加类扩展 java.time。该项目是 future 可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter , 和 more .

关于java 日历 setFirstDayOfWeek 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29227153/

相关文章:

java - 当达到 10 个矩形时替换屏幕上的矩形对象?

java - 索引越界异常,我写的函数挂掉了

c# - 生成日历

java - 如何从日期变量中提取月份?

java - 如何忽略特定 jar 的 JAVA_TOOL_OPTIONS ?

java - 如何在Java中用单词替换字符

java - 如何检索 Spring Data 的 PersistentEntity?

Java 两个日历日期之间的天数不一致

java - 修复了文本字段上的日期分隔符 (dd-mm-YYYY)

javascript - 在自己编写的 Javascript 日历中更改年份?