如果輸入總是有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.DateTimeFormatterBuilder
有java.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。
假設這[post](https://stackoverflow.com/questions/30135025/java-date-parsing-with-microsecond-or-nanosecond-accuracy)可能會有助於你找到一個位移納秒的格式化程序。 –
我相信一個選項是'timeStamp = timeStamp.replace('','T');'然後使用一個參數'LocalDateTime.parse(CharSequence)'。我個人更喜歡[Hugo的解決方案](https://stackoverflow.com/a/45315209/5772882),但這很有趣。 –