我不确定我做错了什么,但我有一段代码可以计算两个日期之间的天数,如下所示:
final Calendar first = new GregorianCalendar(2010, Calendar.OCTOBER, 1);
final Calendar last = new GregorianCalendar(2010, Calendar.NOVEMBER, 1);
final long difference = last.getTimeInMillis() - first.getTimeInMillis();
final long days = difference / (1000 * 60 * 60 * 24);
System.out.println("difference: " + difference);
System.out.println("days: " + days);
总而言之,上面的代码块计算 2010 年 10 月 1 日到 2010 年 11 月 1 日之间的天数。我期望看到它返回 31 天(因为 10 月有 31 天)
difference: xxxx
days: 31
但它却显示 10 月有 30 天!
difference: 2674800000
days: 30
我设法将其范围缩小到 2010 年 10 月 2 日到 2010 年 10 月 3 日之间,这似乎只有 82800000 毫秒,而不是完整的 86400000 毫秒(正好少了一个小时)。
有人知道我做错了什么吗?或者说,10 月 2 日是一个比平常少一分钟的特殊日期?
(86400000 - 82800000)/1000 = 3600
,即一小时。您会看到夏令时,以及整数数学的舍入
您可以通过使用浮点数进行计算并在最后进行舍入来解决它,或者您可以查看类似的库乔达时间 http://joda-time.sourceforge.net/它提供了比内置的更好的日期数学。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)