6

这似乎很奇怪。Java 8 根据毫秒是否为零来格式化输出。您如何强制 Java 8 (1.8.0_20) 始终吐出毫秒,无论它们是否为零?

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
4

1 回答 1

11

你不使用ISO_OFFSET_DATE_TIME,基本上:)

如果您按照文档进行操作,您最终会获得以下文档ISO_LOCAL_TIME

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

  • 两位数表示一天中的小时。这是预填充零以确保两位数。
  • 一个冒号
  • 两位数的分钟。这是预填充零以确保两位数。
  • 如果秒数不可用,则格式已完成。
  • 一个冒号
  • 两位数的秒数。这是预填充零以确保两位数。
  • 如果纳秒为零或不可用,则格式完整。
  • 一个小数点
  • 一到九位数字表示纳秒。将根据需要输出尽可能多的数字。

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

于 2016-02-03T18:18:13.950 回答