Java日期时间格式化为ISO_DATE_TIME。

3

我想在Java的DateTimeFormatter ISO_DATE_TIME末尾添加一个Z,而不是硬编码。

String sample = "2018-05-11T13:35:11Z";

DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX][X]");

DateTimeFormatter df1 = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'");

LocalDateTime newLocalDateTime = LocalDateTime.parse(sample, df1);

System.out.println(newLocalDateTime.toString());

输出为:
2018-05-11T13:35:11

我希望输出结果为2018-05-11T13:35:11Z

如果我理解您的意思正确,那么您是正确的:在格式模式字符串中硬编码 Z 作为一个文字是不正确的。 - Ole V.V.
3个回答

2
你正在调用你的LocalDateTime对象的toString()方法,你应该调用format方法。请更改代码。
System.out.println(newLocalDateTime.toString());

为了

System.out.println(newLocalDateTime.format(df1));

输出

2018-05-11T13:35:11Z

2

如果您希望输出具有像Z这样的时区偏移量,则应使用OffsetDateTimeZonedDateTime

LocalDateTime ldt = LocalDateTime.parse("2018-05-11T13:35:11");

OffsetDateTime odt = ldt.atOffset(ZoneOffset.UTC);
System.out.println(odt); // prints: 2018-05-11T13:35:11Z

ZonedDateTime zdt = ldt.atZone(ZoneOffset.UTC);
System.out.println(zdt); // prints: 2018-05-11T13:35:11Z

正如您所看到的,toString()方法将以您请求的格式返回日期。


0

你不应该使用 LocalDateTime,而应该使用 OffsetDateTime。你也可能不需要格式化程序。

    String sample = "2018-05-11T13:35:11Z";

    OffsetDateTime dateTime = OffsetDateTime.parse(sample)
            .withOffsetSameInstant(ZoneOffset.UTC);

    System.out.println(dateTime.toString());

这段代码的输出结果是所需的:

2018-05-11T13:35:11Z

调用 withOffsetSameInstant() 确保日期和时间在 UTC,即使输入不是。我使用 OffsetDateTime.toString() 生成输出字符串。我利用了你的示例字符串和所需输出都是 ISO 8601 格式的事实。 OffsetDateTime 和其他来自 java.time 的类将 ISO 8601 格式解析为默认格式,即没有任何显式格式化程序,并从它们的 toString 方法中产生 ISO 8601 格式。

OffsetDateTime.toString() 一方面会省略秒数,如果它们为 0,则另一方面会包括非零分数秒(所有这些都符合 ISO 8601)。如果您不想要这个,您确实需要一个格式化程序。例如:

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssX");
    System.out.println(dateTime.format(formatter));

你是正确的,你不应该在格式模式字符串中硬编码Z作为文字。 Z表示与UTC偏移量为零。使用格式模式字母X输出偏移量,以确保偏移量始终正确。这将打印偏移量为零的Z

LocalDateTime不保留UTC偏移量,因此在解析时会丢失信息。不要这样做。解析为OffsetDateTime以从字符串中获取所有信息。

链接:Wikipedia文章:ISO 8601


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接