2015-07-19 64 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); 
相關問題