我在 XML 文档中存储了以下时间,它们对应于文档创建和更新的时间:
<create-time>2010-11-04T03:13:35.212Z</create-time>
<update-time>2010-11-03T20:18:26.331-07:00</update-time>
该文档是在晚上 8:13 创建的,然后在 5 分钟后的晚上 8:18 更新,但是当我使用 format-dateTime(xs:dateTime(.), '[ M]/[D]/[Y]')
,我得到 11/4/2010 和 11/3/2010,就好像文档在创建前一天更新过一样,这显然不是案子。我该如何解决这个问题?
最佳答案
XML 文档中的 create-time
和 update-time
是正确的,但它们使用不同的时区:
创建时间
位于 UTC (也称为祖鲁时间,因此为 Z)。更新时间
采用太平洋时间。
如果不同的代码片段设置了这个时间,或者甚至来自使用不同库或函数的相同代码,则可能会发生这种情况。例如,如果您使用 XForms 中的 XPath:
- 使用
current-dateTime()
使用动态上下文中的时区,这通常是运行代码的计算机的当前时区。 - 使用
now()
始终返回 UTC 时间。
XPath 中的解决方案是使用 adjust-dateTime-to-timezone()
功能。这将使您的日期时间标准化,以便它们位于相同的时区。例如,在 XForms 输出中,要仅显示 create-time
的日期部分,您可以使用:
<xforms:output value="format-dateTime(adjust-dateTime-to-timezone(xs:dateTime(create-time)), '[M]/[D]/[Y]')">
<xforms:label>Creation date</xforms:label>
</xforms:output>
关于xpath - 如何在 XPath 中使用不同时区标准化日期存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4090266/