Java Calendar错误?
发布时间:2020-12-15 05:11:38 所属栏目:Java 来源:网络整理
导读:经过大量调试后,我将问题范围缩小到以下代码段: public static void calendarBug() { for (int i=0 ; i6 ; i++) { Calendar c = Calendar.getInstance(); c.clear(); c.set(2015,2,27,i,0); System.out.println(c.getTime()); }} 运行此命令会提供以下输出
经过大量调试后,我将问题范围缩小到以下代码段:
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()); } } 运行此命令会提供以下输出: 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 有谁知道为什么c.set(2015,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,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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |