【问题标题】:How to parse military time (including truncated partials) into a Time?如何将军事时间(包括截断的部分)解析为时间?
【发布时间】:2015-07-19 20:15:06
【问题描述】:

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

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)来执行此操作。

【问题讨论】:

  • 好像是作业。你有没有尝试过?
  • 哈哈。不,这不是家庭作业,但我有点睡眠不足。这将起作用, Strings.padStart(stringValue, 4, '0');在调用格式化程序之前。将更新问题。

标签: java time java-8


【解决方案1】:

好吧,你可以使用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);

【讨论】:

    猜你喜欢
    • 2020-12-09
    • 1970-01-01
    • 2016-07-02
    • 2017-08-29
    • 2017-09-04
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    相关资源
    最近更新 更多