我有两个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类支持夏令时。也许先把你的约会经历一遍?它应该为您进行规范化。看看另一篇文章。