Java: DateTimeFormatter fail to parse time string when seconds and milliseconds are all 0s?(Java:当秒和毫秒都为 0 时,DateTimeFormatter 无法解析时间字符串?)
问题描述
基本上,我使用以下代码将字符串解析为 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.
我不知道为什么它不起作用,它似乎是一个 bug 因为当我使用:
20180301091600001 结果是 2018-03-01T09:16:00.001----------------^ -----------------^^^^^^
还有另一个测试:
2018030100000000 结果是 2018-03-01T00:00--------^^^------------------^^^^^^^^^^^
解析器好像忽略了秒和毫秒为零的时候,为什么?
为什么?的完整解释在 Basil Bourque 的回答中.p>
解决方案
这是一个快速修复,您可以使用其他格式化程序,如下所示:
var 结果 = LocalDateTime.parse("20180301091600000", dtformatter).format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss:SSS"));
输出
2018-03-01T09:16:00:000
Basically, I am using the following code to parse string as LocalDateTime, which works fine most of the time.
DateTimeFormatter dtformatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
However, I encounter cases where the seconds and millseconds are 00000
and this is when the parser fails and print a LocalDateTime
2018-03-01T09:16
instead of 2018-03-01T09:16:00.000
.
System.out.println(LocalDateTime.parse("20180301091600000",dtformatter));
(Note that in my code, I have to parse string as LocalDateTime
, do some comparison and then at the end, print LocalDateTime
to csv)
How can I fix it to make it print 2018-03-01T09:16:00.000
instead of 2018-03-01T09:16
?
FYI, I am using jdk10.
I'm not sure why it's not work, it seems it is a bug because when I use :
20180301091600001 result is 2018-03-01T09:16:00.001
----------------^ -----------------^^^^^^
Also another test :
2018030100000000 result is 2018-03-01T00:00
--------^^^----- -----------^^^^^^^^^^^
It seems that the parser ignore the seconds and millisecond when it is zero, why?
The full explanation why?, is in the answer of Basil Bourque.
Solution
Here is a quick fix where you can use another formatter like this :
var result = LocalDateTime.parse("20180301091600000", dtformatter)
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss:SSS"));
Output
2018-03-01T09:16:00:000
这篇关于Java:当秒和毫秒都为 0 时,DateTimeFormatter 无法解析时间字符串?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Java:当秒和毫秒都为 0 时,DateTimeFormatter 无法解析时间字符串?
基础教程推荐
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01
- 降序排序:Java Map 2022-01-01
- Java:带有char数组的println给出乱码 2022-01-01
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01