从API传递的字符串通常遵循yyyy-MM-dd HH:mm:ss.SSS
格式,但是当时间戳中有结尾的0时,它们会被截断,例如2019-07-16 13:29:15.100
转换为2019-07-16 13:29:15.1
,2019-07-16 13:29:15.110
转换为2019-07-16 13:29:15.11
。我有一个可行的解决方案,只需在结尾处加零即可,但这感觉上可以通过DateTimeFormatter字符串中的可选部分解决。我最接近可行的解决方案如下:
String toParse = "2019-07-16 13:29:15.111";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss[.[S[S[S]]]]");
LocalDateTime timestamp = LocalDateTime.parse(toParse, formatter);
这适用于所有尾随零被截断的情况,但对于毫秒中所有数字都不为零的情况则不适用。错误消息是
java.time.format.DateTimeParseException: Text '2019-07-16 13:29:15.111' could not be parsed, unparsed text found at index 21
这只是括号放置的问题吗?我正在使用Java 8,我们无法更改API传递的内容。
我对这些可选的括号不是很完美,但是您始终可以使用DateTimeFormatter使用可选的毫秒创建DateTimeFormatterBuilder。>
DateTimeFormatter formatter1 = new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd HH:mm:ss")
.optionalStart()
.appendFraction(ChronoField.MILLI_OF_SECOND, 0, 3, true)
.optionalEnd()
.toFormatter();