2010年10月2日Java日历/日期中的错误?

jkl*_*klp 8 java date

我不确定我做错了什么,但我有一段代码可以计算两个日期之间的天数,看起来如下所示:

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

总而言之,上面的代码块计算了2010年10月1日到2010年11月1日之间的天数.我希望看到它返回31天(看到10月份的31天)

difference: xxxx
days: 31
Run Code Online (Sandbox Code Playgroud)

但相反,它在十月份显示了30天!

difference: 2674800000
days: 30
Run Code Online (Sandbox Code Playgroud)

我已经设法将其缩小到2010年10月2日和2010年10月3日之间,这似乎只有82800000毫秒,而不是完整的86400000毫秒(正好缺少一个小时).

有没有人有任何想法我做错了什么?或者10月2日是一个比常规日少一分钟的特殊日期?

Bra*_*ace 10

(86400000 - 82800000)/1000 = 3600,这是一个小时.你会看到夏令时,再加上整数数学的四舍五入

您可以通过使用浮点数进行计算并在最后进行舍入来绕过它,或者您可以查看像Joda时间这样的库,它提供了比内置更好的日期数学.