2015-07-19 28 views
3

官方航空公司的出发和到达时间通常在几分钟内提供。以下是典型示例:如何将军事时间(包括截断偏分量)解析为时间?

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

前两个可以使用带有HHmm和Hmm的DateTimeFormatter进行分析。在分析错误的第三结果,并尝试与仅分钟(毫米)的结果是不同的错误解析它:无法从TemporalAccessor获得本地时间:{MinuteOfHour = 30}

限制条件:

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

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

感谢您的帮助。

更新:一个显而易见的解决方案是在相同的过程中预置零。例如,使用番石榴:

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

仍然好奇,如果有办法做到这一点,只有像hh和mm这样的标准格式代码。

+0

好像功课。你有尝试过什么吗? – Reimeus

+0

LOL。不,这不是家庭作业,但我有点睡眠不足。这将工作,Strings.padStart(stringValue,4,'0');在调用格式化程序之前。将更新问题。 –

回答

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); 
相关问题