如何找到两个Joda-Time DateTimes之间的差异,以分钟为单位

Dee*_*mar 136 java jodatime

以下是我写的方法:

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;
}
Run Code Online (Sandbox Code Playgroud)

现在从我的方法你可以看到我在对象中有一个Joda-Time DateTime对象datetime,从我的结果我得到一个时间戳,我转换为jodatime punchTime.现在我想找出这两个日期之间的差异,我该怎么做?

提前致谢

Mad*_*mer 438

就像是...

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());
Run Code Online (Sandbox Code Playgroud)

哪个输出

1
24
1440
Run Code Online (Sandbox Code Playgroud)

要么

System.out.println(Minutes.minutesBetween(yesterday, today).getMinutes());
Run Code Online (Sandbox Code Playgroud)

这可能是你所追求的更多

  • 我同意,这应该是选定的答案.它整洁而简单. (2认同)

alf*_*day 74

这将使您获得两个DateTime对象之间的区别,以毫秒为单位:

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

long diffInMillis = d2.getMillis() - d1.getMillis();
Run Code Online (Sandbox Code Playgroud)

  • MadProgrammer的答案应该是已接受的答案.注意简单使用`Minutes.minutesBetween`. (76认同)
  • 不,我不同意,它太罗嗦和不清楚:"打卡时间日期时间之间的分钟分钟"比"第二个日期毫秒减去第一个日期毫秒"更糟糕 (5认同)
  • 这不会考虑夏令时. (4认同)

Car*_*ndo 5

就像是...

Minutes.minutesBetween(getStart(), getEnd()).getMinutes();
Run Code Online (Sandbox Code Playgroud)


mor*_*tar 5

DateTime d1 = ...;
DateTime d2 = ...;
Period period = new Period(d1, d2, PeriodType.minutes());
int differenceMinutes = period.getMinutes();
Run Code Online (Sandbox Code Playgroud)

在实践中,我认为这将始终给出与基于Duration. 但是,对于与分钟不同的时间单位,它可能更正确。例如,从 2016/2/2 到 2017/2/1 有 365 天,但实际上不到 1 年,如果使用PeriodType.years().

理论上,由于闰秒,几分钟内可能会发生同样的情况,但 Joda 不支持闰秒。