Ниже приведен метод, который я написал:
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 punchTime
. Теперь я хочу выяснить разницу между этими двумя датами, как мне это сделать?
Days.daysBetween(d1, d2)
является соседом вашего другаОтветы:
Это даст вам разницу между двумя объектами DateTime в миллисекундах:
DateTime d1 = new DateTime(); DateTime d2 = new DateTime(); long diffInMillis = d2.getMillis() - d1.getMillis();
источник
Minutes.minutesBetween
.Что-то типа...
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
или
Что, вероятно, больше то, что вам нужно
источник
LocalTime
), но я бы посоветовал вам протестировать его и посмотреть. Однако возникает вопрос, в каком часовом поясе будет представлено полученное значение?Что-то типа...
источник
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 не поддерживает дополнительные секунды.
источник