Wel*_*att 5 java string parsing datetime-format
从 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);
Run Code Online (Sandbox Code Playgroud)
这适用于所有尾随零被截断的情况,但不适用于所示的毫秒中所有数字均非零的情况。错误信息是
java.time.format.DateTimeParseException: Text '2019-07-16 13:29:15.111' could not be parsed, unparsed text found at index 21
Run Code Online (Sandbox Code Playgroud)
这只是支架放置的问题吗?我使用的是 Java 8,我们无法更改 API 传递的内容。
我对这些可选的毫秒括号并不是很完美,但是您始终可以 使用DateTimeFormatterBuilder创建带有可选毫秒的 DateTimeFormatter
DateTimeFormatter formatter1 = new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd HH:mm:ss")
.optionalStart()
.appendFraction(ChronoField.MILLI_OF_SECOND, 0, 3, true)
.optionalEnd()
.toFormatter();
Run Code Online (Sandbox Code Playgroud)