5

日付との差を計算する必要があります。方法を見つけましたが、この奇妙な結果が得られました。何か不足していますか?

public static void main(String[] args) throws ParseException {
    DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    long result = format.parse("2012-03-25 24:00").getTime() - format.parse("2012-03-25 00:00").getTime();
    System.out.println("Difference in hours: " + result/(1000*60*60));
    result = format.parse("2012-03-26 24:00").getTime() - format.parse("2012-03-26 00:00").getTime();
    System.out.println("Difference in hours: " + result/(1000*60*60));
}

これが結果です: 時間差: 23 時間差: 24

アドバイスをありがとう、今私は Joda libray を使用しています。この方法で差を計算すると、この質問があります。

DateTime  begin = new DateTime("2012-03-25T00:00+01:00");
DateTime  end = new DateTime("2012-03-26T00:00+01:00");
Hours m = Hours.hoursBetween(begin, end);

この方法を使用して時間を計算すると、24 時間になります (DST が考慮されていないため)

DST を考慮して結果として 23 時間を取得するには、どのクラス/計算を使用する必要がありますか (既に別の方法を試しましたが、取得できません)、Period クラスは?

助けてくれてありがとう...

4

2 に答える 2

11

そのタイムゾーンで夏時間が変更された日付をたまたま選択した可能性があるため、1 日の長さは実際には 23 時間しかない可能性があります。(2012 年 3 月 25 日は確かにヨーロッパの DST 変更日でした。たとえば、Europe/Londonです。ただし、デフォルトのタイム ゾーンが何であるかはわかりません。)

UTC を使用するように日付形式を設定した場合、この影響は見られません。(文字列表現で 24:00 を使用するのは少し奇妙です。念のため。) ただし、データが何を表しているのか、または何を測定しようとしているのかは明確ではありません。これらの現地時間の間に実際にどれくらいの時間が経過したかを調べたい場合は、データが実際にどのタイムゾーンにあることを意図しているかを調べる必要があります。

(別の回答で述べたように、Joda Timeは一般的にはるかに優れた API ですが、適切に使用する方法を知る必要があり、実際の経過時間を計算しようとすると、ここでも同じ結果が表示されます。 .)

于 2012-11-23T10:36:08.590 に答える