如何将军事时间(包括截断的部分时间)解析为时间?

How to parse military time (including truncated partials) into a Time?

官方航空公司的起飞和到达时间通常以小时和分钟为单位提供。以下为典型例子:

1830  - 6:30 pm
 730  - 7:30 am
  30  - 30 minutes after midnight (ie 12:30 am)

前两个可以使用带有 HHmm 和 Hmm 的 DateTimeFormatter 进行解析。第三个导致解析错误,尝试仅用分钟 (mm) 解析它会导致不同的错误:无法从 TemporalAccessor 获取 LocalTime:{MinuteOfHour=30}

限制条件:

  1. 如果可能的话,我想提供一个通用的解决方案来使用格式化程序来处理这个问题,因为我不想中断对所有其他有效时间变体的解析。

  2. 显然我可以预处理传入的数据以添加缺失的零,但我有很多 GB 的数据并且想避免额外的传递。

感谢您的帮助。

更新:一个明显的解决方案是在同一遍中添加零。例如,使用番石榴:

stringValue = Strings.padStart(stringValue, 4, '0');
LocalTime.parse(stringValue, TypeUtils.timeFormatter);

仍然好奇是否有办法仅使用 hh 和 mm 等标准格式代码来执行此操作。

好吧,您可以使用 DateTimeFormatterBuilder 创建默认值:

    String timeStr = "30";
    DateTimeFormatter formatter = new DateTimeFormatterBuilder()
                                .append(DateTimeFormatter.ofPattern("mm"))
                                .parseDefaulting(ChronoField.HOUR_OF_DAY,0)
                                .toFormatter();
    LocalTime parsedTime = LocalTime.parse(timeStr, formatter);