【发布时间】:2016-09-12 23:14:30
【问题描述】:
问题:您认为这是 java.util.Calendar 中的错误吗?
本地 (PDT) 时区的日历对象被实例化并分配零(纪元开始)日期。在将日历的毫秒、秒和分钟设置为零后,该值将保持不变。但是,一旦将一天中的小时设置为零,时间就会变为非零。它 获取值 -57600000ms = -16 小时。这可能是一个时区错误,但值 -16 小时与执行时有效的本地 -7 小时 (PDT) 偏移不对应。如果没有夏令时,时间偏移量是 PST(-8 小时),也不对应于 -16 小时。
如果设置小时会影响时区偏移量,您会期望设置分钟也应该因为:(来自https://en.wikipedia.org/wiki/Time_zone)一些地方“使用与标准时间的半小时偏差,有些地方”......“使用四分之一小时偏差。”
代码:
Date epochStart = new Date(0L);
System.out.println("epochStart=" + epochStart.getTime());
Calendar calendar = Calendar.getInstance();
calendar.setTime(epochStart);
System.out.println("epochStart in calendar=" + calendar.getTime().getTime());
calendar.set(Calendar.MILLISECOND, 0);
System.out.println("ms cleared in calendar=" + calendar.getTime().getTime());
calendar.set(Calendar.SECOND, 0);
System.out.println("second cleared in calendar=" + calendar.getTime().getTime());
calendar.set(Calendar.MINUTE, 0);
System.out.println("minute cleared in calendar=" + calendar.getTime().getTime());
calendar.set(Calendar.HOUR_OF_DAY, 0);
System.out.println("hourOfDay cleared in calendar=" + calendar.getTime().getTime());
输出:
epochStart=0
epochStart in calendar=0
ms cleared in calendar=0
second cleared in calendar=0
minute cleared in calendar=0
hourOfDay cleared in calendar=-57600000
我在 java.util.Calendar 中找到了其他错误的描述,但我认为这不为人所知。
-- 感谢您的宝贵时间。
【问题讨论】: