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

L. *_*anc 3 java time java-8

官方航空公司的出发和到达时间通常以小时和分钟提供.以下是典型示例:

1830  - 6:30 pm
 730  - 7:30 am
  30  - 30 minutes after midnight (ie 12:30 am)
Run Code Online (Sandbox Code Playgroud)

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

约束:

  1. 我想提供一个通用的解决方案,如果可能的话,使用格式化器处理这个问题,因为我不想破解所有其他时间变量的解析.

  2. 显然我可以预处理传入的数据以预先缺少零,但我有很多GB的数据,并希望避免额外的传递.

谢谢你的帮助.

更新:一个明显的解决方案是在同一个传递中添加零.例如,使用Guava:

stringValue = Strings.padStart(stringValue, 4, '0');
LocalTime.parse(stringValue, TypeUtils.timeFormatter);
Run Code Online (Sandbox Code Playgroud)

仍然很好奇是否有办法只使用标准的格式代码,如hh和mm.

Rea*_*tic 5

好吧,您可以使用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);
Run Code Online (Sandbox Code Playgroud)