java DateTimeFormatter无法按预期工作
我必须将日期时间字符串转换为分区日期时间对象。我使用了DateTimeFormatter来阅读模式。根据documentation,模式中的“Z”可以接受如下格式:
- +/-万
- +/-00:00
但是分区时间。parse(myDate,格式化程序)仅适用于第一种情况;相反,在第二种情况下,代码生成一个异常
Execution exception[[DateTimeParseException: Text '2020-06-22T16:00:00.000+00:00' could not be parsed at index 23]]
我正在使用Java8。举例及;代码:
"2020-06-08T12:59:10.288+0000" **work**
"2020-06-08T12:59:10.288+00:00" **doesn't work**
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
ZonedDateTime dateConvertedUTC = ZonedDateTime.parse(dateTime, formatter);
LocalDateTime dateConverted = dateConvertedUTC.withZoneSameInstant(ZoneId.of("Europe/Rome")).toLocalDateTime();
我做错了什么? 谢谢
# 1 楼答案
您为时区指定了Z,这就是2020-06-08T12:59:10.288+0000起作用的原因
但是如果你想解析2020-06-08T12:59:10.288+00:00,你的格式必须是
您可以在JavaDoc中找到:
# 2 楼答案
您确实需要为日期时间字符串
2020-06-08T12:59:10.288+00:00
定义一种格式。它已经在default format of OffsetDateTime中了输出:
注意:从
ZonedDateTime
到LocalDateTime
的转换丢弃了有价值的信息,即时区。因此,只有在确定业务逻辑不需要时区信息时,才应该执行此转换