这是现在的真实日历:
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 类?
- > Java SE 8和 SE 9然后
- 内置。
- 带有捆绑实现的标准 Java API 的一部分。
- Java 9 添加了一些次要功能和修复。
- > Java SE 6和 SE 7
- 许多 java.time 功能在 ThreeTen-Backport 中被反向移植到 Java 6 和 7 .
- > Android
- ThreeTenABP项目专门针对 Android 改编ThreeTen-Backport(如上所述)。
- 参见 How to use ThreeTenABP… .
ThreeTen-Extra项目用附加类扩展 java.time。该项目是 future 可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如 Interval
, YearWeek
, YearQuarter
, 和 more .
关于java 日历 setFirstDayOfWeek 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29227153/