【问题标题】:Joda Datetime Constructor: Do I need to specify TimeZone for a String ending with Z?Joda Datetime 构造函数:我是否需要为以 Z 结尾的字符串指定 TimeZone?
【发布时间】:2015-05-29 12:16:51
【问题描述】:

我的数据库将所有日期时间值存储为 UTC 字符串。当我看字符串时,它们是这样的

2013-05-28T01:38:13.000Z
  1. 根据documentation,'Z' 代表时区偏移量。由于“Z”之后没有任何内容,这是否意味着没有偏移量,因此它代表 UTC 时间?

  2. 如果是,我还需要在构造函数中指定 TimeZone 吗?由于字符串似乎已经这样做了(说它是 UTC 时间)?

    DateTime myDate = new DateTime("2013-05-28T01:38:13.000Z", DateTime.UTC); 
    

第二个参数是必须的吗? 谢谢。

【问题讨论】:

    标签: java datetime timezone jodatime utc


    【解决方案1】:

    是的。您仍然需要传递时区 (UTC)。

    这样做的原因是纯字符串参数会正确提取年、月等的值,但随后将它们解释为属于默认时区,而不是解析 Z+-x 部分。

    (我承认这有点令人困惑。)

    您可以在另一个问题with call trace 中查看更多详细信息,以及下面的评论以更好地解释 Z 的含义

    【讨论】:

    • 谢谢迭戈。我也经历了另一个问题。所以我知道我们必须将时区提供给构造函数,因为“它就是这样工作的”。我想知道为什么它不能从字符串的 Z+-x 解释时区信息?还有什么是'Z'的意义。是祖鲁语的意思吗?我看到只要有+-x,字符串中就没有'Z',为什么?
    • @Gadam - Z 确实是对“Zulu”的引用,但它也是 ISO8601 规范的一部分。偏移量也是规范的一部分,但您永远不会在同一字符串中看到 both。此外,Z+00:00 之间存在细微差别,Z 肯定 UTC,而+00:00 可能是 UTC,但也可以只是来自恰好在该点偏移为零的时区,例如冬季的Europe/London,夏季的Atlantic/Azores,或全年的Atlantic/Reykjavik
    • 感谢@MattJohnson。我希望更新答案以包括您对“Z”的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    相关资源
    最近更新 更多