我不确定我做错了什么,但我有一段代码可以计算两个日期之间的天数,它看起来像下面这样:
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
,即一小时。您看到的是夏令时,以及整数数学的舍入
您可以通过使用 float 进行计算并在最后四舍五入来解决这个问题,或者您可以查看像 Joda time 这样的库它提供了比内置更好的日期数学。
关于java - 2010 年 10 月 2 日的 Java 日历/日期错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4468232/