1

2 つの日付オブジェクト間の期間を分単位で計算しようとしています。

このstackoverflowの質問からの調査中に、いくつかのインスピレーションを見つけました。一般に、これは正しく動作しているように見えますが、1 つのテストケースで興味深い動作が発生しています。

以下に添付されたソースコードを実行すると (単純にコピーして貼り付けることができます)、(正しい結果) 6 ではなく 66 分が返され、現在その理由がわかりません。おそらく私は今、何かを監督しているのではないでしょうか。それが何であるか教えていただけますか?

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class Test {

    private SimpleDateFormat parserSDF = new SimpleDateFormat("MM/dd/yy HH:mm",
            Locale.ENGLISH);

    public static void main(String[] args) {
        Test test = new Test();
        Date begin = test.createDateFromString("10/25/09 1:54");
        Date end = test.createDateFromString("10/25/09 2:00");

        int duration = test.minutesDiff(begin, end);
        //result is 66
        System.out.println(duration);
    }

    public int minutesDiff(Date earlierDate, Date laterDate) {
        if (earlierDate == null || laterDate == null)
            return 0;

        return (int) ((laterDate.getTime() / 60000) - (earlierDate.getTime() / 60000));
    }

    public Date createDateFromString(String dateString) {
        Date date = null;
        try {
            date = parserSDF.parse(dateString);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
}

ところで、このようなものを計算するのにはるかに優れたこの Joda ライブラリが存在することは知っていますが、可能であれば、外部ライブラリなしで滞在したいと思います。

あなたが私と共有しているすべての考えに感謝します.

編集:ああ、これは時計の変更が原因である可能性がありますか?時計の変更は 2009 年 10 月 25 日に行われ、時刻は午前 3 時から午前 2 時に戻りました。これは、この結果が正しいことを意味する可能性があります

4

3 に答える 3

5

お住まいの地域によっては、サマータイムとも呼ばれるサマータイムが終了したようです。 これが 2009 年の表です。2009 年 10 月 25 日は、多くのロケールの終了日でした。6 ではなく 66 が表示された理由を説明できます。余分な60分がありました。

于 2013-07-08T16:48:21.183 に答える
0
 laterDate.getTime()  

longミリ秒単位で値を返します。long 値を int にキャストしています。これにより、不正確な時間遅延が発生します。

于 2013-07-08T16:47:21.840 に答える