如果我的日期是2015-03-07 02:00:00 -0500并且我加1天(时间从2 - > 3月3日改变)我得到了错误的值,因为结果日历:
添加1天之前:2015-03-07 02:00:00 -0500
添加1天后:2015-03-08 01:00:00 -0500
通过执行以下代码行调整了这一天:
System.out.println("Before Adding 1 Day: " + getFormattedDate(cal));
cal.add(Calendar.DATE, 1);
System.out.println("After Adding 1 Day: " + getFormattedDate(cal));
当凌晨2点向前移动到凌晨3点时,日历是如何以凌晨1点结束的。
那么它的行为应该与你在UTC中同时添加1天并将其转换回来时的行为相同,因为预期从凌晨2点开始凌晨3点才真正变为凌晨3点。同时使用基于GMT的日历会产生:
在添加1天之前:2015-03-07 02:00:00 -0500
在加入1天之前GMT cal:2015-03-07 07:00:00 +0000
加入1天GMT后:2015-03-08 07:00:00 +0000
添加1天后:2015-03-08 03:00:00 -0400
Calendar gmtCal = Calendar.getInstance(UTC_TIMEZONE);
gmtCal.setTimeInMillis(calTime);
System.out.println("Before Adding 1 Day cal: " + getFormattedDate(cal));
System.out.println("Before Adding 1 Day GMT cal: " + getFormattedDate(gmtCal));
gmtCal.add(Calendar.DATE, 1);
cal.setTimeInMillis(gmtCal.getTimeInMillis());
System.out.println("After Adding 1 Day GMT cal: " + getFormattedDate(gmtCal));
System.out.println("After Adding 1 Day cal : " + getFormattedDate(cal));
答案 0 :(得分:1)
对于那些实现DST的时区,本地时间2015-03-07 02:00:00 -0500
在技术上不存在。在这些情况下,我猜测结果是不确定的。可以肯定的是,您可以使用2015-03-07 01:59:59 -0500
和2015-03-07 03:00:00 -0500
进行测试,这样可以提供正确的结果,或者至少不会对DST转换产生错误。
但是,如果例如内部代码增加86400秒,那么在这种情况下丢失一小时是有意义的。