如何解析格式 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

Documentaion of DateTimeFormatter 和模式字母。

所有以下将 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()