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]')、ドキュメントが作成される 1 日前に更新されましたが、明らかにそうではありません。どうすればこれを修正できますか?

4

1 に答える 1

3

XML ドキュメントのcreate-timeupdate-timeは正しいですが、異なるタイムゾーンを使用しています。

  • create-timeUTC (ズールー時間とも呼ばれるため、Z) です。
  • update-time太平洋時間です。

これは、異なるコードがこの時点で設定されている場合、または異なるライブラリまたは関数を使用する同じコードから発生する場合もあります。たとえば、XForms から XPath を使用している場合:

  • Usingcurrent-dateTime()は動的コンテキストからのタイムゾーンを使用します。これは多くの場合、コードが実行されているマシンの現在のタイムゾーンです。
  • alwaysを使用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 に答える