web-dev-qa-db-ja.com

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

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

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;
}

これで私のメソッドから、datetimeという名前のオブジェクトに Joda-TimeDateTime オブジェクトがあり、その結果から、jodatime punchTimeに変換するタイムスタンプが1つ得られます。ここで、これら2つの日付の差分を調べたいのですが、どうすればよいですか?

128
Deepak Kumar

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

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

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

何かのようなもの...

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());

おそらくあなたが望んでいることのほうが多いでしょう

429
MadProgrammer

何かのようなもの...

Minutes.minutesBetween(getStart(), getEnd()).getMinutes();
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年未満であり、PeriodType.years()を使用する場合は0年に切り捨てる必要があります。

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

0
morningstar