首页 > 解决方案 > Java 将 DateTime 从“yyyy-MM-dd HH:mm:ss.SSSSSSS”转换为“yyyy-MM-dd HH:mm:ss.S”或从“yyyy-MM-dd HH:mm:ss.SSSSSSS”转换为“yyyy-MM-dd HH:mm:ss.SSS”

问题描述

爪哇 11

我想将“yyyy-MM-dd HH:mm:ss.SSSSSSS”中的日期转换为“yyyy-MM-dd HH:mm:ss.S”或“yyyy-MM-dd HH:mm:ss”。 SSS”基于毫秒值。如果毫秒全为零,那么我只想要单个零,但如果它是非零值,那么我只想要省略尾随零的值。

例子 :

  1. 输入:2021-03-10 16:37:02.4230000 => 所需输出:2021-03-10 16:37:02.423
  2. 输入:2021-03-10 16:39:51.0000000 => 所需输出:2021-03-10 16:39:51.0
  3. 输入:2021-04-22 23:03:52.0234000 => 所需输出:2021-04-22 23:03:52.0234

标签: javajava-11java-time

解决方案


所以,我从类似...

String text = "2021-03-10 16:37:02.4230000";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSS");

LocalDateTime ldt1 = LocalDateTime.parse("2021-03-10 16:37:02.4230000", formatter);
DateTimeFormatter shortFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");
System.out.println(shortFormatter.format(ldt1));

LocalDateTime ldt2 = LocalDateTime.parse("2021-03-10 16:39:51.0000000", formatter);
System.out.println(shortFormatter.format(ldt2));

哪个打印出来...

2021-03-10 16:37:02.4
2021-03-10 16:39:51.0

嗯,不是我们要找的。

我们很幸运,DateTimeFormatterBuilder上课了。所以接下来,我尝试了类似...

DateTimeFormatter toFormatter = new DateTimeFormatterBuilder()
        .appendPattern("yyyy-MM-dd HH:mm:ss")
        .appendFraction(ChronoField.MILLI_OF_SECOND, 1, 9, true)
        .toFormatter();

System.out.println(toFormatter.format(ldt1));
System.out.println(toFormatter.format(ldt2));

哪个打印出来...

2021-03-10 16:37:02.423
2021-03-10 16:39:51.0

成功

现在,请注意,我以前没有真正使用DateTimeFormatterBuilder过,所以可能有其他一些非常棒的酷方法来实现相同或更好的结果,但是干草,这是一个不错的开始


推荐阅读