【发布时间】:2020-07-27 08:56:16
【问题描述】:
从 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 传递的内容。
【问题讨论】:
-
我无法复制。我可以成功运行你的代码...
-
@Sweeper 代码没有给出完全正确的结果。预期:
2019-07-16T13:29:15.111。在我的 Java 11 上观察到:2019-07-16T13:29:15.100。有关解释,请参阅我的答案。 -
@OleV.V.啊...我实际上并没有检查解析结果。我只是指出没有得到提到的例外。哇,我不知道方括号会破坏重复模式!学到了一些新东西。
标签: java string parsing datetime-format