2017-07-25 64 views
3

解析納秒我有時間戳2017-07-25 16:19:59.89384少於6個位數

我想對它進行解析:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS"); 
LocalDate time = LocalDateTime.parse(timeStamp, formatter); 

但我得到一個DateTimeParseException因爲納秒只有5位。有沒有比填充0更好的解決方案?

+1

假設這[post](https://stackoverflow.com/questions/30135025/java-date-parsing-with-microsecond-or-nanosecond-accuracy)可能會有助於你找到一個位移納秒的格式化程序。 –

+1

我相信一個選項是'timeStamp = timeStamp.replace('','T');'然後使用一個參數'LocalDateTime.parse(CharSequence)'。我個人更喜歡[Hugo的解決方案](https://stackoverflow.com/a/45315209/5772882),但這很有趣。 –

回答

3

如果輸入總是有5個位數納秒,可使用5個S字母而不是6:

String timeStamp = "2017-07-25 16:19:59.89384"; 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSS"); // five "S" 
LocalDateTime datetime = LocalDateTime.parse(timeStamp, formatter); 

還要注意的是LocalDateTime.parse(在你的代碼不是LocalDate等)返回LocalDateTime


如果你不知道有多少位將在輸入時,可以使用java.time.format.DateTimeFormatterBuilderjava.time.temporal.ChronoField並確定數字的最小和最大數量:

DateTimeFormatter formatter = new DateTimeFormatterBuilder() 
    // date/time 
    .appendPattern("yyyy-MM-dd HH:mm:ss") 
    // nanoseconds, with minimum 1 and maximum 9 digits and a decimal point 
    .appendFraction(ChronoField.NANO_OF_SECOND, 1, 9, true) 
    // create formatter 
    .toFormatter(); 
LocalDateTime datetime = LocalDateTime.parse(timeStamp, formatter); 

你只需要根據您的需要調整值1和9。

相關問題