java.time ISO 日期格式,具有固定的毫位数(在 Java 8 及更高版本中)

2022-09-03 14:03:28

默认情况下,即时toString 方法使用 DateTimeFormatter.ISO_INSTANT formatter。如果数字恰好为 0,则该格式化程序不会在分数为秒内打印数字。

java-time 示例:

    2015-10-08T17:13:07.589Z
    2015-10-08T17:13:07Z

Joda-Time的例子(以及我对java.time的期望):

    2015-10-08T17:13:07.589Z
    2015-10-08T17:13:07.000Z

在某些系统中解析这确实令人沮丧。Elasticsearch是我遇到的第一个问题,没有支持可选millis的预定义格式,但我可以使用自定义格式解决这个问题。默认值似乎是错误的。

看来你无论如何都无法真正为 Instants 构建自己的格式字符串。唯一的选项是实现我自己的java.time.format.DateTimeFormatterBuilder.InstantPrinterParser吗?


答案 1

只需创建一个保留三个小数位数的 DateTimeFormatter

DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendInstant(3).toFormatter();

然后使用它。例如:

System.out.println(formatter.format(Instant.now()));
System.out.println(formatter.format(Instant.now().truncatedTo(ChronoUnit.SECONDS)));

...打印(在我运行它时):

2015-10-08T21:26:16.571Z
2015-10-08T21:26:16.000Z

课堂文档摘录:

...小数位数参数允许控制小数秒的输出。指定零将导致不输出小数位数。从 1 到 9 将输出越来越多的数字,如有必要,请使用零右填充。特殊值 -1 用于输出尽可能多的数字,以避免任何尾随零。...


答案 2

推荐