当前位置: 首页 > 面试题库 >

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

乐欣可
2023-03-14
问题内容

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

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这样的东西是不可能的。


问题答案:

您正在使用

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-DD HH:mm:ss");

应该

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

您会得到正确的结果

Start: 2013-05-31 10:15:01
End: 2013-08-01 11:22:33
62 days, 1 hours, 7 minutes, 32 seconds

这是日期模式的javadoc。dd是每月的一天。DD是一年中的一天。您的Date对象只是没有按照您期望的方式进行解析。基本上,一年中的日期值31覆盖了月份值。

调试器是您的朋友。



 类似资料:
  • 我已经搜索了4个小时了,但是还没有找到一个用JavaScript计算两个日期(年、月和天)之间差异的解决方案,比如:2010年4月10日是3年、x月和y天之前。 有很多解决方案,但它们只提供了日、月或年的格式差异,或者它们不正确(意味着没有考虑一个月或闰年的实际天数,等等)。做那件事真的有那么难吗? 我看了一下: http://momentjs.com/->只能输出年、月或天的差异 http://

  • 问题内容: 如何计算JavaScript中两个Date()对象的差异,而只返回差异中的月数? 任何帮助将是巨大的:) 问题答案: “差异中的月数”的定义要经过很多解释。:-) 您可以从JavaScript日期对象获取年,月和日。根据您要查找的信息,可以使用这些信息来计算两个时间点之间有多少个月。 例如,现成的,它找出两个日期之间有多少 整月 ,而不计算部分月份(例如,不包括每个日期所在的月份):

  • 问题内容: 我必须找到java中两个不同日期对象之间的时间差异,如果该时间超过5秒,我必须使会话无效。 这是场景: 我有一个jsp页面,它每5秒设置一次会话 我还有另一个jsp页面,每1秒访问一次, 现在,我必须在我提到的另一个jsp中进行比较,并使会话无效, 因此,如果差异超过5秒,则会话无效。 问题答案:

  • 问题内容: 请参考以下示例,并请告诉我您的想法。 输出= 预期输出= 由于我在十一月只有15天,所以我应该去十一月 问题答案: 试试这个 或者

  • 问题内容: 我想得到两个Java Date对象之间的区别。我使用了Joda-Time库。但是问题是我得到的天数差异大于实际的天数差异。 这是我的代码段: 这是我的输出: 在这里,为什么将“ 06/22/2010”设为1月22日?有人遇到类似的问题吗? 帮我朋友..提前感谢.. 问题答案: 月份是MM 在您的情况下: DateFormat formatter = new SimpleDateForm

  • 我想计算2个月之间的差异,我不想考虑一个月是30天,并且以毫秒的时间来转换它们,我不想使用像焦达这样的库,我也找到了一个使用LoalDead的解决方案,但是我使用的是java 7。我寻找我的问题的答案,但找不到任何答案,我尝试了许多方法,我尝试创建一个日历,并以毫秒为单位传递我的两个日期之间的差异,但如果我尝试获取15/04和15/5之间的差异,我将得到30天,而不是1个月,下面是代码 我可以用什