1

longエポックからの時間を表す2 つの s があります。どちらも同じタイムゾーンです。サマータイムを考慮して、これら 2 つの時間の差を秒単位で求めたいと思います。

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

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

「あ」の場所2009-11-30T08:13:16.000-00:00

「b」の場所2009-10-10T04:00:00.000-00:00

JodaTime を使用しIntervalて、これら 2 つの時間から を作成し、それらを に変換してDuration、 を取得できますStandardSeconds

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

ただし、これは機能しません。これは、夏時間の節約を台無しにすることをPeriod示すためのドキュメントです。Duration

この期間がインスタントに追加されると、各フィールドが順番に追加されます。その結果、これにはサマータイムが考慮されます。サマータイムが始まる前日に 1 日の期間を追加すると、時間を同じに保つために 24 時間ではなく 23 時間しか追加されません。これが必要な動作でない場合は、期間を参照してください。

どうすればこのタスクを達成できますか?

4

2 に答える 2

3

Javaのlongは、特定の時点を表します (うるう秒を無視して、1970 年 1 月 1 日の午前 0 時からのミリ秒)。タイムゾーンを持たず、夏時間との切り替えもありません。常に UTC で表されます。あなたが使用できる2つのそのようなタイムポイント間の秒単位の差を見つけるために

(secondTime - firstTime) / 1000

指定した 2 つの時間は GMT で表されます。つまり、

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 に答える