Java 8 DateTimeFormatter在它们为零时丢弃millis?

Chr*_*sel 5 java console formatting datetime

这看起来很怪异.Java 8根据millis是否为零来格式化输出.你如何强迫Java 8(1.8.0_20)总是吐出millis,无论它们是否为零?

public static void main(String[] args) {
    TemporalAccessor zeroedMillis = DateTimeFormatter.ISO_OFFSET_DATE_TIME.parse("2015-07-14T20:50:00.000Z");
    TemporalAccessor hasMillis = DateTimeFormatter.ISO_OFFSET_DATE_TIME.parse("2015-07-14T20:50:00.333Z");
    System.out.println(DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(zeroedMillis));
    System.out.println(DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(hasMillis));
}

2015-07-14T20:50:00Z
2015-07-14T20:50:00.333Z
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 9

你不用ISO_OFFSET_DATE_TIME,基本上:)

如果您按照文档进行操作,最终您的文档中ISO_LOCAL_TIME包含:

这将返回一个不可变格式化程序,它能够格式化和解析ISO-8601扩展本地时间格式.格式包括:

  • 两个数字的小时.这是预先填充零以确保两位数.
  • 结肠
  • 分钟的两位数.这是预先填充零以确保两位数.
  • 如果第二分钟不可用,则格式完成.
  • 结肠
  • 二分钟的两位数.这是预先填充零以确保两位数.
  • 如果纳秒级为零或不可用,则格式完成.
  • 小数点
  • 纳秒级的一到九位数.将根据需要输出许多数字.

如果你总是想要3个数字,我怀疑你想要DateTimeFormatter.ofPattern的模式yyyy-MM-dd'T'HH:mm:ss.SSSX.

  • @ChrisKessel:已修复 - 最后需要一个 X 而不是 Z。请参阅编辑后的答案。 (2认同)