gpt4 book ai didi

java - Joda-time DateTime.withTimeAtStartOfDay() 在亚洲/德黑兰时区的日期 (2036,3,21) 中产生错误结果

转载 作者:行者123 更新时间:2023-11-29 04:21:40 28 4
gpt4 key购买 nike

在 Joda-Time 版本 2.9.9 中,我想删除 DateTime 变量的时间部分。

仅针对时区 Asia/Tehran 和某些日期(例如(2036-03-21、2037-03-21,...),它返回 1:00:00 结果的时间部分。

我也检查了 Joda-Time 源代码,但我没有发现任何问题。

代码是:

DateTime dt = new DateTime(2036, 03, 21, 10, 0, DateTimeZone.forID(Asia/Tehran));
dt = dt.withTimeAtStartOfday();

实际结果:

2036-03-21T01:00:00.000+04:30

预期结果:

2036-03-21T00:00:00.000+04:30

时间不为零。这只发生在 Asia/Tehran 区域。

我的系统配置:

  • Java 版本:1.7.0_72 - 我必须使用 Java 7
  • Joda Time :2.9.9

我通过将DateTime转换为LocalDate解决了这个问题,但我想知道为什么会出现这个问题?

最佳答案

这是因为伊朗在 3 月 21 日或 22 日的 00:00(以天文春分点为准)从标准时间切换到夏令时。在 2036 年,这发生在 21 日。 In 2018 it happens to fall on the 22nd .

简而言之,时间从2036/03/20 24:00跳到2036/03/21 01:00。那天从午夜到凌晨 1 点不存在。

在编写处理时间的代码时,请始终牢记与预期结果的意外小偏移几乎肯定是由于管理时间更改造成的。对于历史日期更是如此,其中偏移量可以是任意数量的分钟和秒,而不仅仅是整小时或半小时。

关于java - Joda-time DateTime.withTimeAtStartOfDay() 在亚洲/德黑兰时区的日期 (2036,3,21) 中产生错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48781357/

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