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

时间:2016-02-03 18:08:35

标签: java datetime console formatting

这看起来很奇怪。 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

1 个答案:

答案 0 :(得分:8)

您基本上不使用ISO_OFFSET_DATE_TIME:)

如果您按照相关文档进行操作,最终会出现在ISO_LOCAL_TIME的文档中,其中包含:

  

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

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

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