2

我在 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,就像文档一样在创建前一天更新,显然不是这样。我怎样才能解决这个问题?

4

1 回答 1

3

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

  • create-timeUTC(也称为祖鲁时间,因此是 Z)。
  • update-time是在太平洋时间。

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

  • Usingcurrent-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>
于 2010-11-03T18:21:36.233 回答