不带时区组件的ISO 8601日期时间

24

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

根据wikipedia(我不想以此为基础做出商业决策):

如果没有与时间表示一起给出UTC关系信息,则假定时间是本地时间。

然而,我无法通过ISO或任何其他通常可接受的真相来源找到支持文件。我找到的所有内容都是关于如何处理本地时间偏移量的(例如+/- 0500等)。在这些情况下假设本地时间将帮助我大大简化操作,因为我的用户可以为所有地区提交相同的日期,而无需计算每个地区的具体偏移量。

例如:

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

时区为空的 ISO 8601 字符串是否有已确定的解释?

2个回答

28

ISO 8601的第4.2.2节提供了一些例子,没有时区指示符,表示它们是当地时间。4.2.4表示UTC时间使用“Z”指示符。当然,这总会引发问题,“本地时间在哪里?”...

 

如果根据4.2.2.2到4.2.2.4使用本地时间,则区域标识符为空。如果根据4.2.4使用UTC,则为UTC设计器[Z]。如果根据4.2.5.2使用本地时间和与UTC之间的差异,则为差异组件。


1
太棒了,这正是我在寻找的。ISO文档不是免费“公开”可用,这有点让人失望,这就是我第一次错过它的原因。感谢那些上传它的人 :)用户输入中有一个固有属性,指定了区域,因此“where”方面已经得到了处理。 - Devin

-1

如果没有时区标识符,日期时间字符串将被解释为本地时间 - 但是是服务器的本地时间。

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


谁说它必须被解释为服务器的本地时间,而不是其他适当的地方? - fabspro
1
让我更加精确地说明:它将被解释为您运行代码的环境的本地时间。如果代码在后端运行,则日期将使用服务器本地的TZ偏移量进行解释。如果服务器位于与客户端不同的时区,则您会感到困惑。 - btk
我仍然认为这是特定于应用程序的。本地时间就是本地时间,除非添加了时区,否则它没有时区。 - fabspro
但是,如果您开始在本地日期上执行操作,许多库将按照约定将本地日期/时间解释为本地计算机的时区! - fabspro

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