首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jodatime IllegalInstantException

Jodatime IllegalInstantException
EN

Stack Overflow用户
提问于 2018-10-02 13:42:50
回答 1查看 1.2K关注 0票数 2

我已经尝试过关于这个片段的几乎所有的东西,而且我仍然得到了IllegalInstentException。

代码语言:javascript
复制
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();
}

致命例外:由于时区偏移过渡(夏令时“间隙”)导致的非法瞬间: 2018-10-21T00:00:00.000 (美国/圣保罗) 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。(DateTime.java:532) org.joda.time.LocalDateTime.toDateTime (LocalDateTime.java:750) org.joda.time.LocalDateTime.toDateTime (LocalDateTime.java:731)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-02 13:49:09

似乎输入不是一个有效的日期。这个问题在这个页面中已经讨论过了。

原因:

Joda-Time只允许键类存储有效的日期时间。例如,2月31日不是有效的日期,因此不能存储它(除部分日期外)。 同样的有效日期时间原则也适用于夏令时(DST).在许多地方使用DST,当地的时钟在春天向前移动一个小时,秋天/秋天移动一个小时。这意味着,在春天,在不存在当地时间的情况下,存在着一个“差距”。 “由于时区偏移过渡而导致的非法瞬间”的错误指的是这一差距。-它意味着您的应用程序试图在间隔内创建一个日期时间--这个时间不存在。由于Joda-Time对象必须是有效的,所以这是不允许的。

可能的解决办法如下:

  • 使用LocalDateTime,因为所有本地日期时间都是有效的.
  • 当将LocalDate转换为DateTime时,使用toDateTimeAsStartOfDay()来处理和管理任何空白。
  • 解析时,如果正在解析的字符串没有时区,请使用parseLocalDateTime()。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52609641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档