现在是真实日历:
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
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 day of week
的哪一天(已尝试过SUNDAY和其他人)。显示相同的结果3
。所以firstDayOfWeek
似乎不会影响结果。
我做错了吗?
修改
我刚才想到并感谢下面的答案,这setFirstDayOfWeek
不会影响get(Calendar.DAY_OF_WEEK)
或get(Calendar.WEEK_OF_YEAR)
的结果
那么这个方法setFirstDayOfWeek()
是为什么设计的?
我的意思是我如何告诉程序我希望2015/3/29
成为第12周的最后一天,而不是将其视为第13周的第一天?
答案 0 :(得分:2)
cal.get(Calendar.DAY_OF_WEEK)
将返回给定日期的当天(星期日,星期一等)。因此无论一周的第一天是什么,它都将返回星期二然后是3。这与setFirstDayOfWeek
方法无关。
如果您想计算自本周开始以来的天数,您只需使用getFirstDayOfWeek
获取一周的第一天并进行一些简单的数学运算。
答案 1 :(得分:1)
LocalDate.of( 2015 , Month.MARCH , 24 ) // `LocalDate` object for 2015-03-24.
.getDayOfWeek() // DayOfWeek.TUESDAY constant object
.getValue() // 2
Calendar
是一个丑陋的混乱,它的兄弟级别也是如此。幸运的是,这些旧的日期时间类现在已经遗留下来,取而代之的是java.time类。
如果您希望星期一作为一周的第一天,星期日是最后一个,编号为1-7,那么请使用java.time类中默认使用的ISO 8601日历。
DayOfWeek
DayOfWeek
枚举为每周的ISO日期保留预定义对象。如果需要,你可以查询它的数字,尽管通常更好地传递这个枚举的对象而不仅仅是整数。
LocalDate
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 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。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。
答案 2 :(得分:0)
setFirstDayOfWeek只是告诉日历哪一天被视为第一天,即星期日或星期一或任何其他日子。任何日期都不会改变dayOfWeek。此方法的javadoc指出以下内容:
public void setFirstDayOfWeek(int value)
设定一周的第一天是什么;例如,美国的星期日,法国的星期一。
参数: 价值 - 给定的一周的第一天。