【发布时间】:2018-07-26 02:07:42
【问题描述】:
我正在尝试解析符合 ISO8601 标准的字符串,这些字符串仅指定到某一点的日期,例如 2018-02 表示 2018 年 2 月,跳过这一天。
java.time 包似乎无法解析此类字符串。我尝试了以下方法:
Instant.parse("2018-02");
LocalDateTime.parse("2018-02")
LocalDate.parse("2018-02", DateTimeFormatter.ISO_DATE);
失败并出现以下错误
DateTimeParseException:无法在索引 7 处解析文本“2018-02”
我也尝试了以下方法,但我实际上并不想指定确切的模式而只是接受所有符合 ISO8601 的内容:
LocalDate.parse("2018-02", DateTimeFormatter.ofPattern("yyyy-MM"));
失败:
java.time.format.DateTimeParseException:无法解析文本“2018-02”:无法从 TemporalAccessor 获取 LocalDate:{MonthOfYear=2, Year=2018},java.time.format.Parsed 类型的 ISO /p>
有没有办法使用java.time 包解析此类 ISO8601 字符串?
【问题讨论】:
-
嗯,日期是 day 而不是 month ... - 你可以假设一天,例如第一个,并将其附加到您获得的日期字符串中。
-
你的字符串总是这样,还是需要解析
2018-02、2018-02-15、2018-02-15T12等? -
从技术上讲,我只需要解析
yyyy-MM,但我想通过接受任何 ISO8601 日期(包括yyyy-MM-dd和 time-parts)使其更健壮
标签: java java-time iso8601 localdate