I have the following times stored in an XML document, which correspond to the time when the document was created and then updated:
<create-time>2010-11-04T03:13:35.212Z</create-time>
<update-time>2010-11-03T20:18:26.331-07:00</update-time>
The document was created at 8:13 pm, and then updated 5 minutes later, at 8:18 pm, but when I show the creation dates with format-dateTime(xs:date开发者_如何学JAVATime(.), '[M]/[D]/[Y]')
, I get 11/4/2010 and 11/3/2010, as if the document was updated one day before it was had been created, which is obviously not the case. How can I fix this?
The create-time
and update-time
in your XML document are correct, but they use different timezones:
create-time
is in UTC (also called Zulu time, hence the Z).update-time
is in Pacific time.
This can happen if different pieces of code set this the time, or even from the same code using different libraries or functions. For instance, if you are using XPath from XForms:
- Using
current-dateTime()
uses a timezone from the dynamic context, which is often the current timezone for the machine on which the code is running. - Using
now()
always returns a UTC time.
The solution in XPath is to use the adjust-dateTime-to-timezone()
function. This will normalize your dateTimes so they are in the same timezones. As an example, in an XForms output, to show just the date part of create-time
you would use:
<xforms:output value="format-dateTime(adjust-dateTime-to-timezone(xs:dateTime(create-time)), '[M]/[D]/[Y]')">
<xforms:label>Creation date</xforms:label>
</xforms:output>
精彩评论