gpt4 book ai didi

java - 两个日期之间的天数误解

转载 作者:行者123 更新时间:2023-12-01 07:48:40 25 4
gpt4 key购买 nike

当我想计算两个日期之间的天数跨度时,我对 Java 中的日期管理存在误解。

假设我们有两个不同的日期:

  • 日期 1:1986-01-24
  • 日期 2:2017-04-20

案例 1:我有一段使用日期的代码片段:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date dt1 = format.parse("1986-01-24");
Date dt2 = format.parse("2017-04-20");
int intSpanInDays= (int) ((dt2.getTime() - dt1.getTime()) / (1000 * 60 * 60 * 24));
System.out.println("Days between: " + intSpanInDays);

输出1:

Days between: 11408

情况 2:使用日历的代码片段:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

GregorianCalendar cal1 = new GregorianCalendar();
cal1.setTime(format.parse("1986-01-24"));
cal1.set(Calendar.HOUR, 0);
cal1.set(Calendar.MINUTE, 0);
cal1.set(Calendar.SECOND, 0);

GregorianCalendar cal2 = new GregorianCalendar();
cal2.setTime(format.parse("2017-04-20"));
cal2.set(Calendar.HOUR, 0);
cal2.set(Calendar.MINUTE, 0);
cal2.set(Calendar.SECOND, 0);
long spanInMillis = cal2.getTimeInMillis() - cal1.getTimeInMillis();

GregorianCalendar cal3 = new GregorianCalendar();
cal3.setTimeInMillis(spanInMillis);
long millisInADay = 1000 * 60 * 60 * 24;
System.out.println("Days between: " + (cal3.getTimeInMillis() / millisInADay));

输出2:

Days between: 11408

案例 3:在 Excel 中使用电子表格的示例:

当我使用 MS Excel 获取此跨度时,只需引入给定日期并简单地减去,输出如下:

问题

为什么Java的日期计算代码少了一天?情况 1 和 2 中缺少或错误的内容与情况 3 中的结果不匹配?

最佳答案

电子表格考虑了夏令时,并且您的计算被天真地截断,并且考虑到间隔中比 25 小时的日子多了 1 个 23 小时的日子,23 小时的余数被截断,产生结果 1比正确答案少一天。

关于java - 两个日期之间的天数误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43690484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com