Java 8 DateTimeFormatter在';你是零吗?

Java 8 DateTimeFormatter在';你是零吗?,java,datetime,console,formatting,datetimeformatter,Java,Datetime,Console,Formatting,Datetimeformatter,这似乎很奇怪。Java8根据毫秒是否为零对输出进行不同的格式化。如何强制Java8(1.8.020)总是吐出毫秒,而不管它们是否为零 public static void main(String[] args) { TemporalAccessor zeroedMillis = DateTimeFormatter.ISO_OFFSET_DATE_TIME.parse("2015-07-14T20:50:00.000Z"); TemporalAccessor hasMillis =

这似乎很奇怪。Java8根据毫秒是否为零对输出进行不同的格式化。如何强制Java8(1.8.020)总是吐出毫秒,而不管它们是否为零

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

您不使用
ISO\u OFFSET\u DATE\u TIME
,基本上:)

如果您按照文档中的说明进行操作,您将进入
ISO\u LOCAL\u TIME
的文档,其中包含:

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

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

如果您总是想要正好3个数字,我怀疑您想要的模式是
yyy-MM-dd'T'HH:MM:ss.SSSX

是的,不幸的是,该模式无法解析:“无法在索引23处解析”。搜索似乎表明某种与分数(毫)解析相关的错误。@ChrisKessel:我喝完茶后会看一看:)@ChrisKessel:嗯。。。这对我来说很有用…这很奇怪。我正在尝试这个,你的代码是什么样子的?模式的DateTimeFormatter.解析(“2016-02-03T10:40:31.457Z”);错误:无法在索引处分析文本“2016-02-03T10:40:31.457Z”23@ChrisKessel:修复它-它需要一个X而不是一个Z结尾。请参见编辑后的答案。