java - 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”基于毫秒值。如果毫秒全为零,那么我只想要单个零,但如果它是非零值,那么我只想要省略尾随零的值。
例子 :
- 输入: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
嗯,不是我们要找的。
我们很幸运,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
过,所以可能有其他一些非常棒的酷方法来实现相同或更好的结果,但是干草,这是一个不错的开始
推荐阅读
- kubernetes - 可以在 k8s 上 flink 使用 pv 使用 NFS 和 pvc 作为高可用性 storageDir
- google-api - .Net - Google Play 下载销售报告
- javascript - Python 抛出错误,“TypeError:'NoneType' 对象不可下标”
- garbage-collection - 无法在 Java 11 上启动 Java 虚拟机
- migration - 本地 azure Devops server 2019 迁移到 azure devops 服务,无需迁移工具
- jquery - 按下按钮后如何使“提交”表单从 Ajax 工作
- python - 通过从特定列复制值来重组python中的数据框
- openshift - 应用程序控制台与集群控制台有什么区别?
- python - 如何设置自定义目录以输出 selenium 保存的 pdf 文件
- python - 如何在没有控制台外壳的情况下在 python tkinter 列表框中运行 cmd 命令?