Java:跨越几个月的两个日期之间的差异

Mat*_*att 4 java time date

我有以下代码成功地让我在两天之间(以天,小时,分钟,秒为单位)的差异:

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

但是,当日期跨越到另一个月时,这不起作用,例如:

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

是否可以智能地跨越数月并获得准确的时差?我熟悉Joda,但是我希望坚持使用标准的Java API,除非没有像Joda这样的东西是不可能的.

Jon*_*eet 5

虽然你不应该使用约达时间仅仅作为一个更好的日期/时间API,我怀疑问题其实只是你没有正确地解析值.使用格式字符串:

yyyy-MM-dd HH:mm:ss
Run Code Online (Sandbox Code Playgroud)

... dd而不是DD.该DD值是"天一年",我怀疑是混乱外,基本上覆盖月份部分完全.有关SimpleDateFormat详细信息,请参阅文档.

您可以通过打印d1d2解析后验证出错了什么...