如何将军事时间(包括截断的部分时间)解析为时间?
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}
限制条件:
如果可能的话,我想提供一个通用的解决方案来使用格式化程序来处理这个问题,因为我不想中断对所有其他有效时间变体的解析。
显然我可以预处理传入的数据以添加缺失的零,但我有很多 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);
官方航空公司的起飞和到达时间通常以小时和分钟为单位提供。以下为典型例子:
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}
限制条件:
如果可能的话,我想提供一个通用的解决方案来使用格式化程序来处理这个问题,因为我不想中断对所有其他有效时间变体的解析。
显然我可以预处理传入的数据以添加缺失的零,但我有很多 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);