ISO时间的意外输出(8601)

时间:2012-12-31 14:11:46

标签: java date iso8601

Date now = new Date();
long timeInterval = now.getTime() - (15705 * 24 * 60 * 60 * 1000L);
long hours = timeInterval / (60 * 60 * 1000L);
LOG.debug(String.format("current date:%s, timeInterval:%d,hours:%d",now.toString(),timeInterval, hours));

系统打印的结果是(15705表示自20世纪70年代以来的天数):

  

12/12/31 22:06:47 DEBUG stat.TimeTest:当前日期:星期一12月31日   22:06:47 CST 2012,timeInterval:50807153,小时:14

您可以看到当前小时为21小时,但结果显示为14小时。

2 个答案:

答案 0 :(得分:4)

GMT时间内{p> Mon Dec 31 22:06:47 CST 2012Mon Dec 31 14:06:47 2012,这是用于开始纪元的时区。

换句话说,now.getTime()返回自1970年1月1日00:00:00 GMT以来您使用不同时区的毫秒数。

答案 1 :(得分:2)

now.getTime()可以获得UTC millis的值 - 即GMT + 0。 您显示的日志打印可能使用系统时区,它是22:06:47,可能不在英格兰附近: - )

另外,请使用Calendar类进行日期算术,因为它与您的代码不同,会考虑闰年,闰秒和时区更改等问题(我们不会在UTC中发生这种情况,可能会在任何情况下发生变化)其他区域)