Java Jodatime非法安装例外

Java Jodatime非法安装例外,java,android,datetime,jodatime,android-jodatime,Java,Android,Datetime,Jodatime,Android Jodatime,关于这个片段,我已经尝试了几乎所有的方法,但仍然得到了非法的安装例外 public int getDateDay() { DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd"); DateTime dt; try { dt = formatter.parseDateTime(date); } catch (IllegalInstantException e) {

关于这个片段,我已经尝试了几乎所有的方法,但仍然得到了非法的安装例外

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(美国/圣保罗)键盘箭头向上 arrow_right org.joda.time.chrono.ZonedChronology.localToUTC (ZonedChronology.java:157) org.joda.time.chrono.ZonedChronology.getDateTimeMillis (ZonedTimeology.java:122) org.joda.time.chrono.AssembledChronoloy.getDateTimeMillis (AssembledChronology.java:133)org.joda.time.base.BaseDateTime。 (BaseDateTime.java:257)org.joda.time.DateTime。(DateTime.java:532) org.joda.time.LocalDateTime.toDateTime(LocalDateTime.java:750) org.joda.time.LocalDateTime.toDateTime(LocalDateTime.java:731)


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

原因:

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

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

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

可能的解决办法如下:

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

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

  • 解析时,如果要解析的字符串没有时区,请使用parseLocalDateTime()


什么是日期?