问题 DateTime ISO 8601没有时区组件


我一直在为国际应用程序解析日期时间字符串。我遇到了一个解释问题,我似乎无法找到明确的答案。 将没有时区组件的ISO 8601日期时间字符串视为本地时间吗?

维基百科 (我不想根据我的业务决定):

如果没有给出时间表示的UTC关系信息,   假设时间是在当地时间。

但是,我无法通过ISO或任何其他普遍接受的事实来源找到支持文档。我发现的所有内容都谈到了如何处理当地时间的偏移(例如+/- 0500等)。假设在这些情况下的当地时间对我有很大帮助,因为我的用户可以为所有区域提交相同的日期,而无需计算每个区域的特定偏移量。

例如:

2012-01-01T00:00:00 # Convert to local
2012-01-01T00:00:00Z # Zulu/UTC...don't convert

对于无时区的ISO 8601字符串,是否有既定的解释?


9662
2017-10-13 23:43


起源



答案:


ISO 8601的4.2.2节给出了没有TZ指示符的例子,说它们是当地时间。 4.2.4表示UTC时间使用'Z'指示符。当然它总是提出“当地时间在哪里?”的问题......

如果按照4.2.2.2到4.2.2.4使用当地时间,则区域指示符为空,如果根据4.2.4使用UTC的日期,则为UTC指示符[Z],这是区别-component如果使用本地时间,并且与UTC的差异符合4.2.5.2。


10
2017-10-13 23:50



太棒了,这就是我想要的。 ISO文档不是免费“公开”提供,这是一种蹩脚的原因,这就是我第一次错过它的原因。无论如何,上帝保佑上传它的人:)用户输入中有一个固有属性指定区域,因此“where”方面已经被处理。 - Devin


答案:


ISO 8601的4.2.2节给出了没有TZ指示符的例子,说它们是当地时间。 4.2.4表示UTC时间使用'Z'指示符。当然它总是提出“当地时间在哪里?”的问题......

如果按照4.2.2.2到4.2.2.4使用当地时间,则区域指示符为空,如果根据4.2.4使用UTC的日期,则为UTC指示符[Z],这是区别-component如果使用本地时间,并且与UTC的差异符合4.2.5.2。


10
2017-10-13 23:50



太棒了,这就是我想要的。 ISO文档不是免费“公开”提供,这是一种蹩脚的原因,这就是我第一次错过它的原因。无论如何,上帝保佑上传它的人:)用户输入中有一个固有属性指定区域,因此“where”方面已经被处理。 - Devin


如果没有时区指示符,datetime字符串将被解释为本地时间 - 但是作为SERVER的本地时间。

如果您的用户位于不同的时区,他们提交的没有TZ信息的日期将被错误地解释为您的本地TZ偏移。


0
2018-01-22 16:48