我将尝试编写一个
DateTimeFormatter
来解析以下格式:2020-05-29T07:51:33.106-07:00
我已经查看了ISO_OFFSET_DATE_TIME
,但问题在于它不包含毫秒。因此我决定自己写。
没有时区的话很容易实现:
public static void main (String[] args) throws java.lang.Exception {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");
System.out.println(
LocalDateTime.parse("2020-05-29T07:51:33.106", formatter)
);
}
但是当我试图以以下格式添加时区时
public static void main (String[] args) throws java.lang.Exception {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
System.out.println(
LocalDateTime.parse("2020-05-29T07:51:33.106-07:00", formatter)
);
}
现在出现异常,提示无法解析时区。Exception in thread "main" java.time.format.DateTimeParseException: Text '2020-05-29T07:51:33.106-07:00' could not be parsed at index 23
at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2049)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1951)
at java.base/java.time.LocalDateTime.parse(LocalDateTime.java:492)
at Ideone.main(Main.java:16)
如何解析这种格式的时区?
-07:00
是一个UTC偏移量(ZoneOffset
类),而不是时区(ZoneId
类)。时区是特定地区人们使用的偏移量过去、现在和未来变化的历史记录。 - Basil BourqueISO_OFFSET_DATE_TIME
可以很好地解析毫秒。您不需要其他格式化程序。 - Ole V.V.