我有以下代码,成功地得出了两个日期之间的时间差(以天、小时、分钟和秒为单位):
然而,当日期跨越到另一个月份时,这种方法就不起作用了,例如:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");
Date d1 = format.parse(startTime);
Date d2 = format.parse(endTime);
long diff = d2.getTime() - d1.getTime();
long diffSeconds = diff / 1000 % 60;
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000) % 24;
long diffDays = diff / (24 * 60 * 60 * 1000);
System.out.println("Start: " + startTime);
System.out.println("End: " + endTime);
System.out.println(diffDays + " days, " + diffHours + " hours, " + diffMinutes + " minutes, " + diffSeconds + " seconds");
然而,当日期跨越到另一个月份时,这种方法就不起作用了,例如:
Start: 2013-07-31 10:15:01
End: 2013-08-01 11:22:33
-29 days, -22 hours, -52 minutes, -28 seconds
Start: 2013-05-31 10:15:01
End: 2013-08-01 11:22:33
-29 days, -22 hours, -52 minutes, -28 seconds
能否智能地跨越月份并获取准确的时间差?我熟悉Joda,但是想坚持使用标准的Java API,除非没有Joda这样的东西是不可能的。