提问人:Ademir Constantino 提问时间:11/17/2023 最后编辑:Ademir Constantino 更新时间:11/17/2023 访问量:98
Java 11 ZonedDateTime - 打印格式
Java 11 ZonedDateTime - Print Format
问:
如何使用 Java 11 中的 ZonedDateTime 对象获得 2023-11-16T09:54:12.123 的结果?
我写道:
zdt.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
并得到ISO_LOCAL_DATE_TIME: 2023-11-16T17:25:27.1881768
我想删除只有三位数的纳秒。
答:
0赞
Laurent Schoelens
11/17/2023
#1
您可以将该方法用于构造良好的对象。java.time.ZonedDateTime.format(DateTimeFormatter)
java.time.format.DateTimeFormatter
您可以使用静态方法构造对象,但查看示例输出,应该可以完成这项工作DateTimeFormatter
ofPattern
java.time.format.DateTimeFormatter.ISO_LOCAL_DATE_TIME
另一点是:这个类是线程安全的,所以你可以安全地用你想要的良好输出模式声明一个静态类字段。对于像 这样的上一个日期格式化程序,情况并非如此。DateTimeFormatter
java.text.SimpleDateFormat
评论
0赞
Ademir Constantino
11/17/2023
我写了 zdt.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME) 并得到ISO_LOCAL_DATE_TIME: 2023-11-16T17:25:27.1881768 我希望 TIMESTAMP 只有三位数字,不包括纳秒。
1赞
f1sh
11/17/2023
然后,@AdemirConstantino看看ISO_LOCAL_DATE_TIME背后的模式,并使用没有纳秒的模式。
1赞
Laurent Schoelens
11/17/2023
对于 2023-11-16T17:25:27.188,请尝试 .您可以在此处查看 javadoc 以获取更多模式和字母的含义:docs.oracle.com/javase/8/docs/api/java/time/format/...uuuu-MM-dd'T'HH:mm:ss.SSS
5赞
k314159
11/17/2023
#2
有两种方法可以做到这一点:
- 使用 ISO_LOCAL_DATE_TIME,但将时间截断为毫秒:
zdt.truncatedTo(ChronoUnit.MILLIS)
.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
- 使用自定义格式化程序并保持时间不变:
private static final var ldtMillisFormatter =
DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSS");
...
zdt.format(ldtMillisFormatter)
4赞
Reilas
11/17/2023
#3
"...如何使用 Java 11 中的 ZonedDateTime 对象获得 2023-11-16T09:54:12.123 的结果?..."
您可以手动输入值。
格式说明符的列表可以在 JavaDoc 中找到 DateTimeFormatter。
同样,ISO 8601 的大纲可以在维基百科上找到。
维基百科 – ISO_8601。
ZonedDateTime z = ZonedDateTime.now();
DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");
String s = z.format(f);
或者,使用 DateTimeFormatterBuilder 类。
ZonedDateTime z = ZonedDateTime.now();
DateTimeFormatterBuilder f
= new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ISO_LOCAL_DATE)
.appendLiteral('T')
.appendValue(ChronoField.HOUR_OF_DAY, 2)
.appendLiteral(':')
.appendValue(ChronoField.MINUTE_OF_HOUR, 2)
.appendLiteral(':')
.appendValue(ChronoField.SECOND_OF_MINUTE, 2)
.appendLiteral('.')
.appendValue(ChronoField.MILLI_OF_SECOND, 3);
String s = z.format(f.toFormatter());
输出
2023-11-16T13:02:51.753
评论