Bio*_*Roy 3 java java.util.calendar
经过大量调试后,我将问题范围缩小到以下代码段:
public static void calendarBug() {
for (int i=0 ; i<6 ; i++) {
Calendar c = Calendar.getInstance();
c.clear();
c.set(2015, 2, 27, i, 0);
System.out.println(c.getTime());
}
}
Run Code Online (Sandbox Code Playgroud)
运行此命令会提供以下输出:
Fri Mar 27 00:00:00 IST 2015
Fri Mar 27 01:00:00 IST 2015
Fri Mar 27 03:00:00 IDT 2015
Fri Mar 27 03:00:00 IDT 2015
Fri Mar 27 04:00:00 IDT 2015
Fri Mar 27 05:00:00 IDT 2015
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么c.set(2015,2,27,2,0)返回3AM而不是2AM?
想想你的时间恰好是在DST时间,它向前移动一小时或者向后移动一小时而没有居住这段时间.
所以它不是bug,它是功能.
当您更改不使用DST的时区(比如加拿大/东萨斯喀彻温省)时,您将看到您所期望的.
这是一个例子.
public static void calendarBug() {
for (int i=0 ; i<6 ; i++) {
Calendar c = Calendar.getInstance();
c.setTimeZone(TimeZone.getTimeZone("Canada/East-Saskatchewan"));
c.clear();
c.set(2015, 2, 27, i, 0);
System.out.println(c.getTime());
}
}
Fri Mar 27 08:00:00 EET 2015
Fri Mar 27 09:00:00 EET 2015
Fri Mar 27 10:00:00 EET 2015
Fri Mar 27 11:00:00 EET 2015
Fri Mar 27 12:00:00 EET 2015
Fri Mar 27 13:00:00 EET 2015
Run Code Online (Sandbox Code Playgroud)
这很可能是您的时区的DST切换.
3月27日是2015年3月的最后一个星期五.这是DST在以色列,约旦,叙利亚,西岸等地进行转换的日子.
看到
| 归档时间: |
|
| 查看次数: |
604 次 |
| 最近记录: |