<legend id='yD0ff'><style id='yD0ff'><dir id='yD0ff'><q id='yD0ff'></q></dir></style></legend>
    • <bdo id='yD0ff'></bdo><ul id='yD0ff'></ul>
    <tfoot id='yD0ff'></tfoot>
    1. <i id='yD0ff'><tr id='yD0ff'><dt id='yD0ff'><q id='yD0ff'><span id='yD0ff'><b id='yD0ff'><form id='yD0ff'><ins id='yD0ff'></ins><ul id='yD0ff'></ul><sub id='yD0ff'></sub></form><legend id='yD0ff'></legend><bdo id='yD0ff'><pre id='yD0ff'><center id='yD0ff'></center></pre></bdo></b><th id='yD0ff'></th></span></q></dt></tr></i><div id='yD0ff'><tfoot id='yD0ff'></tfoot><dl id='yD0ff'><fieldset id='yD0ff'></fieldset></dl></div>

      1. <small id='yD0ff'></small><noframes id='yD0ff'>

        Java:当秒和毫秒都为 0 时,DateTimeFormatter 无法解析

        时间:2023-09-29

        1. <tfoot id='pHunq'></tfoot>

          <small id='pHunq'></small><noframes id='pHunq'>

            <bdo id='pHunq'></bdo><ul id='pHunq'></ul>
            <i id='pHunq'><tr id='pHunq'><dt id='pHunq'><q id='pHunq'><span id='pHunq'><b id='pHunq'><form id='pHunq'><ins id='pHunq'></ins><ul id='pHunq'></ul><sub id='pHunq'></sub></form><legend id='pHunq'></legend><bdo id='pHunq'><pre id='pHunq'><center id='pHunq'></center></pre></bdo></b><th id='pHunq'></th></span></q></dt></tr></i><div id='pHunq'><tfoot id='pHunq'></tfoot><dl id='pHunq'><fieldset id='pHunq'></fieldset></dl></div>
            1. <legend id='pHunq'><style id='pHunq'><dir id='pHunq'><q id='pHunq'></q></dir></style></legend>

                    <tbody id='pHunq'></tbody>

                  本文介绍了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 无法解析时间字符串?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:JSONObject 删除空值对 下一篇:Java - 格式化数字以仅打印小数部分

                  相关文章

                  最新文章

                  <i id='f7uIx'><tr id='f7uIx'><dt id='f7uIx'><q id='f7uIx'><span id='f7uIx'><b id='f7uIx'><form id='f7uIx'><ins id='f7uIx'></ins><ul id='f7uIx'></ul><sub id='f7uIx'></sub></form><legend id='f7uIx'></legend><bdo id='f7uIx'><pre id='f7uIx'><center id='f7uIx'></center></pre></bdo></b><th id='f7uIx'></th></span></q></dt></tr></i><div id='f7uIx'><tfoot id='f7uIx'></tfoot><dl id='f7uIx'><fieldset id='f7uIx'></fieldset></dl></div>

                  <small id='f7uIx'></small><noframes id='f7uIx'>

                  1. <legend id='f7uIx'><style id='f7uIx'><dir id='f7uIx'><q id='f7uIx'></q></dir></style></legend>

                        <bdo id='f7uIx'></bdo><ul id='f7uIx'></ul>

                    1. <tfoot id='f7uIx'></tfoot>