6

我正在尝试使用 解析包含日期和时间的字符串java.time.format.DateTimeFormatter(我的最终目标是将此字符串中的日期转换为java.time.LocalDate)。

尝试解析日期时,我不断收到 DateTimeParseExceptions。有人可以帮忙吗?

日期格式为“2015-07-14T11:42:12.000+01:00”。

DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-ddTHH:mm:ss.SSSZ");
LocalDateTime temp = LocalDateTime.ofInstant(Instant.from(f.parse(this.dateCreated)), 
                 ZoneId.systemDefault());
LocalDate localDate = temp.toLocalDate();

我尝试了 ofPattern 的不同变体,例如尝试通过用单引号将 T 括起来(如上所述)来逃避它,并对 . 我已经尝试同时逃避两者。

冒号也需要转义吗?

感谢您对此的任何帮助。

4

2 回答 2

9

它应该是

DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");

//or

DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSz");

代替

DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-ddTHH:mm:ss.SSSZ");

来自 JAVADoc:

偏移量 X 和 x:这会根据模式字母的数量来格式化偏移量。一个字母仅输出小时,例如“+01”,除非分钟不为零,在这种情况下也会输出分钟,例如“+0130”。两个字母输出小时和分钟,不带冒号,如'+0130'。三个字母输出小时和分钟,带有冒号,例如'+01:30'。四个字母输出小时和分钟以及可选的秒,不带冒号,例如'+013015'。五个字母输出小时和分钟以及可选的秒,带有冒号,例如'+01:30:15'。六个或更多字母会引发 IllegalArgumentException。当要输出的偏移量为零时,模式字母'X'(大写)将输出'Z',而模式字母'x'(小写)将输出'+00','

于 2016-02-02T15:05:07.300 回答
2

“yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ”和“yyyy-MM-dd'T'HH:mm:ss.SSSVV”都可以。请注意,5 Zs 工作,但不少于

于 2016-02-02T18:14:34.277 回答