Java日历错误?
经过大量调试,我将问题缩小到以下代码段:Java日历错误?,java,java.util.calendar,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()); } } 有人知道为什么c.se
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());
}
}
有人知道为什么
c.set(2015,2,27,2,0)
会返回凌晨3点而不是凌晨2点
?这很可能是您时区的DST切换
3月27日是2015年3月的最后一个星期五。这是DST在以色列、约旦、叙利亚、约旦河西岸等地转换的日子
看
想想你的时间就在DST时间,它向前移动一个小时,或者向后移动一个小时,而不经历这段时间
所以这不是bug,而是特性。
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
当您更改不使用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
publicstaticvoidcalendarbug(){
对于(inti=0;iIt不是一个bug,它是一个特性。感谢您的详细回答!