【发布时间】:2015-08-12 02:14:57
【问题描述】:
我正面临java.util.Calendar 的奇怪行为。
问题是,当我在两者之间添加一个方法调用 Calendar#getTime() 时,我得到正确的结果,但是当我直接获得一周的 Dates 而没有调用 Calendar#getTime() 时,它指的是 下周,而不是当前周。
请考虑以下代码 sn-p :
public class GetDatesOfWeek {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
Calendar cal = Calendar.getInstance();
cal.set(1991, Calendar.DECEMBER, 11);
//System.out.println(cal.getTime());//LINE NO : 14
for(int i = Calendar.SUNDAY; i <= Calendar.SATURDAY; i++) {
cal.set(Calendar.DAY_OF_WEEK, i);
Date date = cal.getTime();
System.out.println(sdf.format(date));
}
}
}
当我 取消注释 行号 14 我得到以下输出:
Wed Dec 11 07:38:06 IST 1991
08-12-1991
09-12-1991
10-12-1991
11-12-1991
12-12-1991
13-12-1991
14-12-1991
但是当我注释该行并执行代码时,我得到以下输出。
15-12-1991
16-12-1991
17-12-1991
18-12-1991
19-12-1991
20-12-1991
21-12-1991
请注意,在这两种情况下,月份和年份字段都是正确的,但开始日期从 08-12-1991 更改为 15-12-1991 对我来说 08-12-1991 是正确。
我的问题:
- 为什么在上述两种情况下我会得到不同的星期几?
- 为什么 Java 会提供这种功能?
【问题讨论】:
-
您是独立运行这两个测试,还是有代码在一次执行中一个接一个地运行它们?