如何在几分钟内找到两个 Joda-Time 日期时间之间的区别

下面是我写的方法:

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

现在从我的方法可以看到,在对象中有一个名为 datetimeJoda 时间 日期时间对象,并且从我的结果中得到一个时间戳,我正在将其转换为 jodatime punchTime。现在我想知道这两个日期之间的区别,我该怎么做呢?

126689 次浏览

比如..。

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

这可能是你更想要的

这将得到两个 DateTime 对象之间的差值(以毫秒为单位) :

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


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

比如..。

Minutes.minutesBetween(getStart(), getEnd()).getMinutes();
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 不支持闰秒。