Java 11
我想将“yyyy-MM-dd HH:mm:ss.SSSSSSS”中的日期转换为“yyyy-MM-dd HH:mm:ss.S”或“yyyy-MM-dd HH:mm” :ss.SSS"基于毫秒值。如果毫秒全为零,那么我只想要单个零,但如果它是非零值,那么我只想要省略尾随零的值。
示例:
- 输入:2021-03-10 16:37:02.4230000 => 期望输出:2021-03-10 16:37:02.423
- 输入:2021-03-10 16:39:51.0000000 => 所需输出:2021-03-10 16:39:51.0
- 输入:2021-04-22 23:03:52.0234000 => 所需输出:2021-04-22 23:03:52.0234
最佳答案
所以,我开始做一些类似的事情......
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
嗯🤔,不完全是我们要找的。p>
我们很幸运,有 DateTimeFormatterBuilder
类(class)。接下来,我尝试了类似...
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
之前,所以可能有一些其他的,非常 super 酷的方法来达到相同或更好的结果,但是干草,这是一个很好的开始
关于Java将日期时间从 "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",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68171420/