2つのJoda-Time DateTimeの違いを分単位で見つける方法


141

以下は私が書いた方法です:

public List<Map<String, Object>> loadNotYetInEmployee(int shift, Date date,
        int transitionVal, String type, User user) {

    DateTime datetime = new DateTime(date);
    datetime = datetime
            .plus(Period.minutes(shiftTiming.getSession1InTime()));

    List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();

    sql = SqlMapUtils.getSql("attendance.attendancestatus.latein",
            parameters);
    result = getJdbcTemplate().queryForList(sql);
    for (int i = 0; i < result.size(); i++) {
        Date punchInTime = (Date) result.get(i).get("punchtime");
        DateTime punchTime = new DateTime(punchInTime);
    }
    return result;
}

これで、私のメソッドから、名前付きのオブジェクトにJoda -Time DateTimeオブジェクトがdatetimeあり、結果からjodatimeに変換している1つのタイムスタンプを取得していることがわかりpunchTimeます。これら2つの日付の違いを知りたいのですが、どうすればよいですか?


9
Minutes#minutesBetweenはあなたの友達です。
Luiggi Mendoza

2
ただし、これは、DateTimeオブジェクトが同じTimeZoneにある場合にのみ機能します。
ティアゴ2013

1
Days.daysBetween(d1, d2)あなたの友達の隣人です
Shubham Chaudhary

回答:


79

これにより、2つのDateTimeオブジェクトの差がミリ秒単位で取得されます。

DateTime d1 = new DateTime();
DateTime d2 = new DateTime();

long diffInMillis = d2.getMillis() - d1.getMillis();

78
MadProgrammerの答えは、Accepted Answerでした。の簡単な使い方に注目してくださいMinutes.minutesBetween
バジルブルク2014

5
いいえ、私は同意しません。言葉が多すぎて不明確です。「パンチ時間と日付時間の間の分の分」は、「2番目の日付のミリ秒から最初の日付のミリ秒を引いたもの」よりも悪い
ジョナサンノイフェルド2015

4
これは夏時間を考慮に入れません。
Sander Versluys 2017

454

何かのようなもの...

DateTime today = new DateTime();
DateTime yesterday = today.minusDays(1);

Duration duration = new Duration(yesterday, today);
System.out.println(duration.getStandardDays());
System.out.println(duration.getStandardHours());
System.out.println(duration.getStandardMinutes());

どの出力

1
24
1440

または

System.out.println(Minutes.minutesBetween(yesterday, today).getMinutes());

おそらくあなたが望んでいるものより


上記はタイムゾーンを考慮していますか?または、最初にUTC / GMTに変換する必要がありますか?
Doo Dah

@DooDahそれは良い質問です(JodaTimeにはの概念があるので)私はそれを "信じる"が、それLocalTimeをテストして見ることをお勧めします。問題は、結果の値がどのタイムゾーンで表されるかです。
MadProgrammer 2016

これをテストして理解します。私にとって、結果のタイムゾーンは、おそらくコードが実行されているサーバーになります。スケジュールされたキューを実装しています。別のタイムゾーンの日付に基づいて、現在から将来の時間までの時間を計算する必要があります。見つけたものを報告します。
Doo Dah

2
私は同意します、これが選択された答えであるべきでした。端正でシンプルです。
シド

時間差を取得するためだけに新しいDurationオブジェクトを作成することは、クールではありません。大量の日付/時刻オブジェクトで時間差を実行する必要があることを想像してみてください。
AndroidDev


3
DateTime d1 = ...;
DateTime d2 = ...;
Period period = new Period(d1, d2, PeriodType.minutes());
int differenceMinutes = period.getMinutes();

実際には、これは常にに基づく回答と同じ結果をもたらすと思いますDuration。ただし、分とは異なる時間単位の場合は、より正確な場合があります。たとえば、2016/2/2から2017/2/1までの365日がありますが、実際には1年未満であり、を使用する場合は0年に切り捨てられますPeriodType.years()

理論的にはうるう秒が原因で同じことが数分間発生する可能性がありますが、Jodaはうるう秒をサポートしていません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.