gpt4 book ai didi

java - Joda : org. joda.time.IllegalInstantException:由于时区偏移转换而导致非法即时(夏令时 'gap' )

转载 作者:行者123 更新时间:2023-12-02 02:19:45 27 4
gpt4 key购买 nike

在 Android 设备 (7.0) 上,出现此崩溃:

Fatal Exception: org.joda.time.IllegalInstantException: Illegal instant due to time zone offset transition (daylight savings time 'gap'): 1977-05-01T00:00:00.000 (Africa/Casablanca)
at org.joda.time.chrono.ZonedChronology.localToUTC(ZonedChronology.java:157)
at org.joda.time.chrono.ZonedChronology.getDateTimeMillis(ZonedChronology.java:122)
at org.joda.time.chrono.AssembledChronology.getDateTimeMillis(AssembledChronology.java:133)
at org.joda.time.base.BaseDateTime.<init>(BaseDateTime.java:257)
at org.joda.time.base.BaseDateTime.<init>(BaseDateTime.java:198)
at org.joda.time.DateTime.<init>(DateTime.java:323)

当时区为:Africa/Cas​​ablanca (= GMT 0) 时出现

我的代码:

// Failed:
DateTime dateTime = new DateTime(year, month, 1);

// Failed
DateTime dateTime = new DateTime(year, month, 1, 0, 0, 0, 0,
DateTimeZone.forID(TimeZone.getDefault().getID()));

// Failed
DateTime dateTime = new DateTime(year, month, 1, 0, 0, 0,
DateTimeZone.forTimeZone(TimeZone.getDefault()));

我不明白为什么它在这个时区失败。如果我使用其他时区(例如 GMT+1),则完全没有问题。

最佳答案

那是因为 1977 年 5 月 1 日,卡萨布兰卡切换为夏令时:https://www.timeanddate.com/time/zone/morocco/casablanca?year=1977

午夜时分,时钟调快 1 小时至凌晨 1 点。就好像它从晚上 11:59:59 直接“跳”到凌晨 1 点,因此该时区的那个日期不存在午夜。这称为间隙(如果您愿意,也可以称为 DST 间隙)。

Joda-Time 将此解释为您正在使用的时区的无效值,因此出现异常。

如果您不希望出现异常(exception)情况,可以先检查本地日期和时间在该时区是否有效:

LocalDateTime ld = new LocalDateTime(1977, 5, 1, 0, 0, 0, 0);
DateTimeZone zone = DateTimeZone.forID("Africa/Casablanca");
System.out.println(zone.isLocalDateTimeGap(ld)); // true

// if it's not a gap (isLocalDateTimeGap is false), it's safe to create DateTime
DateTime d = ld.toDateTime(zone);

在本例中,它会打印 true,因为 1977 年 5 月 1 日午夜是卡萨布兰卡时区的一个间隙,因此为这些值创建 DateTime 将引发异常。

其他时区不会发生这种情况,因为它们有不同的 DST 规则,并且日期和时间对它们有效。

关于java - Joda : org. joda.time.IllegalInstantException:由于时区偏移转换而导致非法即时(夏令时 'gap' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48680361/

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