我有两个long
代表自纪元以来的时间。他们都有相同的时区。我希望在这两次之间找到差异以秒为单位,尊重日光节省。
(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
会破坏日光节约:
当此时间段添加到瞬间时,效果是添加 每个领域依次。因此,这考虑了日光 节省时间。在日光前一天添加1天的时间段 储蓄开始只会增加23小时而不是24小时来确保 时间保持不变。如果这不是你想要的行为,那么 见持续时间。
我该如何完成这项任务?
答案 0 :(得分:3)
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
GMT也没有转向夏令时。也许你对此感到困惑。
答案 1 :(得分:0)
java.util.Calendar课程支持夏令时。或许可以通过第一次运行您的日期?它应该为你做标准化。看看这个other post。