gpt4 book ai didi

java - 为什么 2020 年 3 月 30 日和 2020 年 3 月 1 日之间的差值错误地给出了 28 天而不是 29 天?

转载 作者:行者123 更新时间:2023-12-01 06:17:29 25 4
gpt4 key购买 nike

TimeUnit.DAYS.convert(
Math.abs(
new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").parse("30-03-2020 00:00:00").getTime() -
new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").parse("1-03-2020 00:00:00").getTime()
),
TimeUnit.MILLISECONDS)

结果是 28,而它应该是 29。

时区/位置可能是问题吗?

最佳答案

问题是由于夏令时的变化(2020 年 3 月 8 日星期日),有 28 天 23 小时 在这些日期之间。 TimeUnit.DAYS.convert(...)将结果截断为 28 天。

要查看问题(我在美国东部时区):

SimpleDateFormat fmt = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
long diff = fmt.parse("30-03-2020 00:00:00").getTime() -
fmt.parse("1-03-2020 00:00:00").getTime();

System.out.println(diff);
System.out.println("Days: " + TimeUnit.DAYS.convert(Math.abs(diff), TimeUnit.MILLISECONDS));
System.out.println("Hours: " + TimeUnit.HOURS.convert(Math.abs(diff), TimeUnit.MILLISECONDS));
System.out.println("Days: " + TimeUnit.HOURS.convert(Math.abs(diff), TimeUnit.MILLISECONDS) / 24.0);

输出

2502000000
Days: 28
Hours: 695
Days: 28.958333333333332

要修复,请使用没有 DST 的时区,例如 UTC :
SimpleDateFormat fmt = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
fmt.setTimeZone(TimeZone.getTimeZone("UTC"));
long diff = fmt.parse("30-03-2020 00:00:00").getTime() -
fmt.parse("1-03-2020 00:00:00").getTime();

输出

2505600000
Days: 29
Hours: 696
Days: 29.0

关于java - 为什么 2020 年 3 月 30 日和 2020 年 3 月 1 日之间的差值错误地给出了 28 天而不是 29 天?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60071278/

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