时差与日光节约有关



我有两个long表示自epoch以来的时间。它们都有相同的时区。我想找出这两次之间的差异(以秒为单位),并考虑到白天的节约。

(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)))

但这不起作用,因为Period的文档表明Duration会破坏Day Light Savings:

当这个时间段被添加到一个瞬间时,效果是添加每个字段依次。因此,这将考虑日光节省时间。将1天的时间段添加到日光前一天节省启动时间将只增加23小时,而不是24小时,以确保时间保持不变。如果这不是你想要的行为,那么请参阅持续时间。

我该如何完成这项任务?

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

(secondTime - firstTime) / 1000

您给出的两个时间以GMT表示,即

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

格林尼治标准时间也没有转换为夏令时。也许你对此感到困惑。

java.util.Calendar类支持夏令时。也许先把你的约会经历一遍?它应该为您进行规范化。看看另一篇文章。

相关内容

  • 没有找到相关文章

最新更新