0
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 表示自 1970 年代以来的天数):

12/12/31 22:06:47 DEBUG stat.TimeTest: 当前日期:Mon Dec 31 22:06:47 CST 2012, timeInterval:50807153, hours:14

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

4

2 回答 2

4

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

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

于 2012-12-31T14:15:39.943 回答
2

now.getTime() 将为您提供 UTC 毫秒的值 - 那是 GMT+0。您显示的日志打印可能使用系统时区,当时是 22:06:47,可能不在英国附近:-)

另外,请使用Calendar类进行日期算术运算,因为它与您的代码不同,它会考虑闰年、闰秒和时区变化等因素(在 UTC 中不会发生,在任何其他区域可能会发生)

于 2012-12-31T14:18:31.720 回答