【问题标题】:Jodatime IllegalInstantExceptionJodatime IllegalInstantException
【发布时间】:2019-03-07 15:46:17
【问题描述】:

我已经尝试了几乎所有关于这个 sn-p 的方法,但我仍然得到 IllegalInstentException。

public int getDateDay() {
    DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd");
    DateTime dt;
    try {
        dt = formatter.parseDateTime(date);
    } catch (IllegalInstantException e) {
        dt = formatter.parseLocalDateTime(date).toDateTime();
    }
    return dt.getDayOfMonth();
}

致命异常:org.joda.time.IllegalInstantException 非法即时 由于时区偏移过渡(夏令时“间隙”): 2018-10-21T00:00:00.000(美国/圣保罗)keyboard_arrow_up arrow_right org.joda.time.chrono.ZonedChronology.localToUTC (ZonedChronology.java:157) org.joda.time.chrono.ZonedChronology.getDateTimeMillis (ZonedChronology.java:122) org.joda.time.chrono.AssembledChronology.getDateTimeMillis (AssembledChronology.java:133) org.joda.time.base.BaseDateTime。 (BaseDateTime.java:257) org.joda.time.DateTime。 (日期时间.java:532) org.joda.time.LocalDateTime.toDateTime (LocalDateTime.java:750) org.joda.time.LocalDateTime.toDateTime (LocalDateTime.java:731)

【问题讨论】:

  • 什么是date

标签: java android datetime jodatime android-jodatime


【解决方案1】:

似乎输入的日期无效。这个问题已经在这个page讨论过了。

原因:

Joda-Time 只允许键类存储有效的日期时间。为了 例如,2 月 31 日不是有效日期,因此无法存储 (部分除外)。

有效日期时间的相同原则适用于夏令时 时间(夏令时)。在许多地方使用 DST,本地时钟移动的地方 春季前进一小时,秋季/秋季后退一小时。这 意味着在春天,有一个当地时间不存在的“差距” 存在。

错误“由于时区偏移转换导致的非法瞬间”是指 到这个差距。 这意味着您的应用程序试图创建一个 间隔内的日期时间 - 一个不存在的时间。 自 Joda-Time 对象必须有效,这是不允许的。

可能的解决方案如下:

  • 使用 LocalDateTime,因为所有本地日期时间都有效。

  • 将 LocalDate 转换为 DateTime 时,请使用 toDateTimeAsStartOfDay() 来处理和管理任何间隙。

  • 解析时,如果正在解析的字符串没有时区,则使用 parseLocalDateTime()。

【讨论】:

    猜你喜欢
    • 2016-06-06
    • 2011-12-04
    • 1970-01-01
    • 2020-09-22
    • 2013-10-23
    • 2011-05-07
    • 2021-06-22
    • 2011-09-21
    • 2013-07-01
    相关资源
    最近更新 更多