【发布时间】:2018-10-02 16:13:37
【问题描述】:
基本上,我使用以下代码将字符串解析为 LocalDateTime,这在大多数情况下都可以正常工作。
DateTimeFormatter dtformatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
但是,我遇到秒和毫秒为00000 的情况,这是解析器失败并打印LocalDateTime 2018-03-01T09:16 而不是2018-03-01T09:16:00.000。
System.out.println(LocalDateTime.parse("20180301091600000",dtformatter));
(请注意,在我的代码中,我必须将字符串解析为LocalDateTime,进行一些比较,然后最后将LocalDateTime 打印到csv)
如何修复它以使其打印2018-03-01T09:16:00.000 而不是2018-03-01T09:16?
仅供参考,我正在使用 jdk10。
【问题讨论】:
-
这是 Java 8 中的一个错误:bugs.openjdk.java.net/browse/JDK-8031085。但它应该在 Java 9 中得到修复,所以在 Java 10 中看到它是令人惊讶的。
-
解析器似乎很好,否则它根本不会打印任何东西,除了解析错误。您的问题似乎是打印
LocalDateTime的默认格式。你也应该格式化你的打印。 -
您的代码在我的 Java 9 上执行得很好。
-
@OleV.V.我正在使用 Java 10 它返回
2018-03-01T09:16 -
@YCF_L 为简洁起见,我想(我没有设计它)。在
2018-03-01T00:00中,可以理解秒和秒的小数部分为 0,因此不需要打印它们。我认为Basil Bourque’s answer 解释了。顺便说一句,为了比较,如果你想打印LocalDateTime对象的完整精度,你需要2018-03-01T00:00:00.000000000。
标签: java date format java-time java-10