如何解析格式 HHmmssZ 的 OffsetTime
how to parse OffsetTime for format HHmmssZ
我正在尝试解析格式为 "HHmmssZ"、
的日期字符串
OffsetTime.parse("115601Z", DateTimeFormatter.ofPattern("HHmmssZ")).toLocalTime()
当我测试它时,我得到了异常:
java.time.format.DateTimeParseException: Text '112322Z' could not be parsed at index 6
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.time.OffsetTime.parse(OffsetTime.java:327)
使用模式字母大写 X
作为偏移量,可以使用 Z
作为零
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HHmmssXXX");
OffsetTime time = OffsetTime.parse("115601Z", timeFormatter);
System.out.println(time);
此片段的输出是:
11:56:01Z
要转换为 LocalTime
,只需像您已经在做的那样使用 .toLocalTime()
。
对于模式字母 Z
给出偏移量 +0000
编辑:正如您在评论中提到的,修复这种情况的相反方法是保留格式模式字符串并解析与所需格式匹配的字符串:
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HHmmssZ");
OffsetTime time = OffsetTime.parse("115601+0000", timeFormatter);
结果和之前一样。格式模式字符串中的一个大写字母 Z
匹配(引用文档):
… the hour and minute, without a colon, such as '+0130'.
Link
所有以下将 return 一个 LocalTime
与值 11:56:01
:
LocalTime.parse("115601Z", DateTimeFormatter.ofPattern("HHmmss'Z'"))
OffsetTime.parse("115601Z", DateTimeFormatter.ofPattern("HHmmssX")).toLocalTime()
OffsetTime.parse("115601Z", DateTimeFormatter.ofPattern("HHmmssXX")).toLocalTime()
OffsetTime.parse("115601Z", DateTimeFormatter.ofPattern("HHmmssXXX")).toLocalTime()
OffsetTime.parse("115601Z", DateTimeFormatter.ofPattern("HHmmssXXXX")).toLocalTime()
OffsetTime.parse("115601Z", DateTimeFormatter.ofPattern("HHmmssXXXXX")).toLocalTime()
OffsetTime.parse("115601Z", DateTimeFormatter.ofPattern("HHmmssZZZZZ")).toLocalTime()
我正在尝试解析格式为 "HHmmssZ"、
的日期字符串OffsetTime.parse("115601Z", DateTimeFormatter.ofPattern("HHmmssZ")).toLocalTime()
当我测试它时,我得到了异常:
java.time.format.DateTimeParseException: Text '112322Z' could not be parsed at index 6
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.time.OffsetTime.parse(OffsetTime.java:327)
使用模式字母大写 X
作为偏移量,可以使用 Z
作为零
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HHmmssXXX");
OffsetTime time = OffsetTime.parse("115601Z", timeFormatter);
System.out.println(time);
此片段的输出是:
11:56:01Z
要转换为 LocalTime
,只需像您已经在做的那样使用 .toLocalTime()
。
对于模式字母 Z
给出偏移量 +0000
编辑:正如您在评论中提到的,修复这种情况的相反方法是保留格式模式字符串并解析与所需格式匹配的字符串:
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HHmmssZ");
OffsetTime time = OffsetTime.parse("115601+0000", timeFormatter);
结果和之前一样。格式模式字符串中的一个大写字母 Z
匹配(引用文档):
… the hour and minute, without a colon, such as '+0130'.
Link
所有以下将 return 一个 LocalTime
与值 11:56:01
:
LocalTime.parse("115601Z", DateTimeFormatter.ofPattern("HHmmss'Z'"))
OffsetTime.parse("115601Z", DateTimeFormatter.ofPattern("HHmmssX")).toLocalTime()
OffsetTime.parse("115601Z", DateTimeFormatter.ofPattern("HHmmssXX")).toLocalTime()
OffsetTime.parse("115601Z", DateTimeFormatter.ofPattern("HHmmssXXX")).toLocalTime()
OffsetTime.parse("115601Z", DateTimeFormatter.ofPattern("HHmmssXXXX")).toLocalTime()
OffsetTime.parse("115601Z", DateTimeFormatter.ofPattern("HHmmssXXXXX")).toLocalTime()
OffsetTime.parse("115601Z", DateTimeFormatter.ofPattern("HHmmssZZZZZ")).toLocalTime()