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

标签 java time java-8

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

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 的数据并且希望避免额外的传递。

感谢您的帮助。

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

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);

关于java - 如何将军事时间(包括截断的部分时间)解析为时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31505522/

相关文章:

java - 比较2套Java

java - 通过JSP连接MySQL

java - 相同的 build.gradle 文件获取不同版本的依赖项(org.json :json)

Python datetime - 在使用 strptime 获取日、月、年之后设置固定的小时和分钟

c++ - 如何在c++中实现函数超时

php - 使用 php 的剩余时间脚本

java - 对于 N = 1 的情况,以兼容方式进行相同类型的多个注释

java - 在 CompletableFuture.allof 中处理超时并记录超时 future 的正确方法

java - 读取和删除文件中的某些行时遇到问题?

java - 如何使用 java 8 lambda 和流对 Map<YearMonth, List<LocalDate>> 进行排序