Jodatime IlLegalInstantException
我几乎已经尝试了有关此代码段的所有内容,但仍然出现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月21日00:00:00.000(美国/圣保罗)键盘箭头向上 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 (Assembly Chronology.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)
解决方案
似乎输入的日期无效。此page中已讨论了该问题。
原因:
Joda-Time只允许键类存储有效的日期时间。为 例如,2月31日不是有效日期,因此无法存储 (部分除外)。
同样的有效日期-时间原则也适用于夏令时 时间(DST)。在许多地方使用DST,在那里本地时钟移动 春天向前走一小时,秋天向后走一小时。这 意味着在春天,有一个当地时间不存在的"缺口" 存在。 错误"因时区偏移转换而导致的即时非法"是指 到了这个缺口。这意味着您的应用程序试图创建 差距内的Date-Time-不存在的时间。自Joda-Time以来 对象必须有效,这是不允许的。
可能的解决方案如下:
使用LocalDateTime,因为所有本地日期时间都有效。
将LocalDate转换为DateTime时,请使用toDateTimeAsStartOfDay(),因为这会处理和管理任何间隔。
/li>分析时,如果要分析的字符串没有时区,请使用parseLocalDateTime()。
相关文章