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

标签 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);

总而言之,上面的代码块计算了 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/

相关文章:

java - 在 eclipse 中使用 TableColumnLayout 时出现 AssertionFailedException

java - JPA、@Transient 字段和 native 查询映射

java - 使用接口(interface)将方法应用于 ArrayList

PHP循环几个月,从12月开始

java - 使用 JDBC 连接到远程 MySQL(host gator)服务器时出错

java - 使用 Hibernate Criteria 获取多个随机行

mysql - 如何检查日期范围的日期位于mysql查询中的两个日期之间

java.text.ParseException : Unparseable date: "04 Mar 2016 20:33+05:30" (at offset 3) 异常

java - 如何获得一年的开始和结束日期?

javascript - 当从 `for` 循环内的 while 循环将值插入数组时,它会覆盖数组中的先前元素