如何在XPath中使用不同的时区对日期存储进行规范化?

时间:2010-11-03 18:20:09

标签: xpath xforms

我将以下时间存储在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 / 2010年3月,好像文件在创建前一天更新,显然不是这样。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

XML文档中的create-timeupdate-time是正确的,但它们使用不同的时区:

  • create-time位于UTC(也称为Zulu时间,因此为Z)。
  • update-time在太平洋时间。

如果不同的代码片段设置了这个时间,甚至是使用不同库或函数的相同代码,则会发生这种情况。例如,如果您使用XForms中的XPath:

  • 使用current-dateTime()使用动态上下文中的时区,该时区通常是运行代码的计算机的当前时区。
  • 使用now()始终返回UTC时间。

XPath中的解决方案是使用adjust-dateTime-to-timezone()函数。这将标准化您的dateTimes,使它们处于相同的时区。例如,在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>