我正在尝试确定XML架构dateTime的默认时区是什么,当它不具体时。 末尾的时区部分是可选的,可以省略:
2013-01-11T16:02:55
我在这个答案中读到,未指定时区时未确定。 我在这个问题的评论中读到,如果未指定,默认值为 UTC。 我也通读了W3C的定义,但没有给我一个明确的答案。
任何专家可以指出我在哪里指定吗?
未指定的时区正是未指定的时区。 不多也不少。 它不是说它是UTC格式,也不是说它在本地时区或任何其他时区,它只是说从某个时钟读取的时间就是那个时间。
它起源于xs:dateTime
的事实根本没有真正发挥作用。 它只是一个 ISO 8601 日期 + 时间(不含时区)值。
这实际上取决于您如何处理此值,以及它的实际含义。
在现实世界中,在处理时间戳时,您可能应该避免这样的值 - 即某事发生的确切时刻。 对于这些,您应该指定一个偏移量,如 -07:00
或一个Z
来指示 UTC。
未指定的值可能具有合法用途:
-
按定期模式安排未来事件时,并与时区配对(如
America/New_York
)。 有关详细信息,请参阅我的其他答案 这里, 这里, 和 这里. -
当提到"浮动"时间时,这可能是在多个时区的不同瞬时时刻。 示例:从晚上 7:00 开始的网络电视节目。 美国东部将在美国西部之前看到它,但它仍然在每个区域以相同的"浮动"时间播出。
当 时区已被某种其他机制知道,并且不存在夏令时歧义的风险时,或者当风险被接受并确定为无关紧要时。
在 XSD 1.0 中,第 3.2.7 节说(秒"未时区时间假定为某个未指定地点的时区中的时间"。 在我看来,这似乎是一个非常明确的迹象,表明它们不会出于验证目的默认为 UTC,并且它们不会默认为任何固定位置(例如服务器时间)的本地时间。 第 3.2.7.4 节描述了(以相当详细和繁琐的长度)dateTime 上的排序关系是部分顺序,而不是总顺序,因为(例如)未时区值 2000-01-20T12:00:00 既不肯定早于,也不绝对晚于,也不绝对等于 2000-01-20T12:00:00Z。
XSD 1.1 修改了很多讨论的文本,但它涉及同一件事。
我相信这与ISO 8601中的规则是一致的。
应用程序如何处理未时区的值,以及其他规范如何处理它们,这是一个单独的问题,需要逐个应用程序和规范来回答。 但出于 XSD 目的,很明显没有默认时区。