Ci-dessous la méthode que j'ai écrite:
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;
}
Maintenant, grâce à ma méthode, vous pouvez voir que j’ai un objet Joda-TimeDateTime dans= nommé datetime
et que mon résultat me donne un horodatage que je convertis jodatime punchTime
. Maintenant, je veux savoir la différence entre ces deux dates, comment puis-je le faire?
Cela vous donnera la différence entre deux objets DateTime en millisecondes:
DateTime d1 = new DateTime();
DateTime d2 = new DateTime();
long diffInMillis = d2.getMillis() - d1.getMillis();
Quelque chose comme...
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());
Quelles sorties
1
24
1440
ou
System.out.println(Minutes.minutesBetween(yesterday, today).getMinutes());
Ce qui est probablement plus ce que vous recherchez
Quelque chose comme...
Minutes.minutesBetween(getStart(), getEnd()).getMinutes();
DateTime d1 = ...;
DateTime d2 = ...;
Period period = new Period(d1, d2, PeriodType.minutes());
int differenceMinutes = period.getMinutes();
En pratique, je pense que cela donnera toujours le même résultat que la réponse basée sur Duration
. Pour une unité de temps différente de celle des minutes, cependant, cela pourrait être plus correct. Par exemple, il y a 365 jours du 2016/2/2 au 2017/2/1, mais en réalité, ils durent moins d'un an et doivent être tronqués à 0 ans si vous utilisez PeriodType.years()
.
En théorie, la même chose pourrait se produire pendant quelques minutes à cause des secondes intercalaires, mais Joda ne prend pas en charge les secondes intercalaires.