1

我有两个longs 代表自纪元以来的时间。他们都有相同的时区。我想找出这两次之间的秒数差异,尊重日光节约。

(def a (java.util.Date. 1259568796000))  ;; Before Day Light Savings

(def b (java.util.Date. 1255147200000))  ;; After Day Light Savings

“a”在哪里2009-11-30T08:13:16.000-00:00

“b”在哪里2009-10-10T04:00:00.000-00:00

使用 JodaTime,我可以Interval将这两次制作出来,将它们变成Duration,然后得到StandardSeconds.

(.getStandardSeconds (.toDuration (Interval. a b)))

但这不起作用,因为 docs forPeriod表明这Duration会弄乱日光节约:

当这个时间段加到一个瞬间时,效果就是依次添加每个字段。因此,这会考虑夏令时。将 1 天的时间段添加到夏令时开始的前一天只会增加 23 小时而不是 24 小时,以确保时间保持不变。如果这不是您想要的行为,请参阅持续时间。

我怎样才能完成这项任务?

4

2 回答 2

3

Java 中的long表示某个时间点(自 1970 年 1 月 1 日午夜以来的毫秒数,忽略闰秒)。它们不带时区,也不用夏令时切换,它始终以 UTC 表示。要查找两个此类时间点之间的秒数差异,您可以使用

(secondTime - firstTime) / 1000

您给出的两次以格林威治标准时间表示,即

1259568796000 = 2009-11-30T08:13:16.000-00:00 GMT
1255147200000 = 2009-10-10T04:00:00.000-00:00 GMT

GMT 也不会切换到夏令时。也许你对此感到困惑。

于 2013-12-12T21:12:30.773 回答
0

java.util.Calendar类支持夏令时。也许首先运行你的日期?它应该为您进行标准化。看看这个其他帖子

于 2013-12-12T21:12:16.193 回答