【问题标题】:What is the standard (round trip) string format for Java DateTime objectsJava DateTime 对象的标准(往返)字符串格式是什么
【发布时间】:2020-07-08 23:24:46
【问题描述】:

我有一个 REST 服务器(C# 版本,Java 版本即将推出),它有大量语言的客户端(加上 Swagger)。

我需要(反)序列化 LocalDateTime、ZonedDateTime 和 OffsetDateTime()。通过使用每个代码,我相信 toString() 为我提供了每个这些的 ISO 可往返文本。

对吗?

如果没有,我应该使用什么?

ps - 我们将任何日期时间减少到上述三个类之一。这应该可以处理任何用例。

【问题讨论】:

    标签: java-time iso8601


    【解决方案1】:

    关闭。

    LocalDateTimeOffsetDateTime 从它们的 toString 方法序列化为 ISO 8601。他们总是可以通过他们的单参数parse 方法解析生成的字符串。您的往返行程已完成。不过,这并不意味着它们会解析每个 ISO 8601 变体。

    对于ZonedDateTime,java.time 的开发人员发明了他们自己的 ISO 8601 扩展:方括号中的时区 ID 通常以打印的字符串结尾不是 ISO 8601 的一部分。例如,ZonedDateTime 可能会打印字符串2020-07-09T20:58:09.445153+02:00[Europe/Zurich]2020-07-09T20:58:09.445153+02:00 部分是 ISO 8601。[Europe/Zurich] 部分不是。不过,Europe/Zurich 是 IANA 时区 ID,因此许多语言应该有机会处理它。如果您确实需要处理时区(不仅仅是 UTC 偏移量),我怀疑会有更好的选择。 ISO 8601 本身没有提供任何处理真实时区的功能。如果ZonedDateTime 有一个偏移量作为其“时区”,则方括号中的 ID 不会打印出来,因此在这种情况下,整个字符串确实符合 ISO 8601。

    您是对的,ISO 8601 是日期和时间数据标准,建议您使用。

    文档引用

    来自LocalDateTime.toString()

    输出将是以下 ISO-8601 格式之一:……

    OffsetDateTime.toString():

    输出将是以下 ISO-8601 格式之一:……

    ZonedDateTime.toString():

    格式由 LocalDateTime 和 ZoneOffset 组成。 如果 ZoneId 与偏移量不同,则输出 ID。 如果偏移量和 ID 为 一样。

    链接:相关问题: ZonedDateTime toString compatability with ISO 8601

    【讨论】:

    • 非常感谢 - 这有助于很多人知道这是正确的。而且我不需要它能够解析任何“正确”的 ISO 字符串,只需要这些类使用它们的 toString() 创建的任何字符串。哦,是的,没有 TimeZone 标准是很痛苦的——应该有。
    猜你喜欢
    • 1970-01-01
    • 2015-12-02
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 2016-12-02
    • 2011-02-05
    • 1970-01-01
    相关资源
    最近更新 更多