XSLT中如何将带不同偏移的PST时间转换为UTC?
问题描述
我在XSLT中通过以下代码输出时间戳:
<time_stamp><xsl:value-of select="format-dateTime(wd:Last_Functionally_Updated, '[M01]/[D01]/[Y0001] [H01]:[m01]:[s01]')"/></time_stamp>
但源字段<wd:Last_Functionally_Updated>为PST时区时间,部分时间带-07:00偏移(PDT夏令时),部分带-08:00偏移(PST标准时)。我尝试使用adjust-dateTime-to-timezone函数加PT1H偏移转换,但仅对-07:00的时间有效,也考虑过截取时区部分但未成功,请问如何正确将这些时间转换为UTC?
解决方案
不需要手动判断或添加固定偏移量,adjust-dateTime-to-timezone函数可以自动识别源日期时间的时区信息并完成转换:
- 核心逻辑:直接将目标时区指定为UTC(
PT0H),函数会根据源字段自带的-07:00或-08:00偏移,自动计算对应的UTC时间。 - 完整代码示例:
<time_stamp> <xsl:value-of select="format-dateTime( adjust-dateTime-to-timezone(wd:Last_Functionally_Updated, xs:timezone('PT0H')), '[M01]/[D01]/[Y0001] [H01]:[m01]:[s01]' )"/> </time_stamp>
补充说明
如果遇到部分源字段不带时区信息的极端情况,可以先通过has-timezone()判断,再手动指定PST时区后转换:
<time_stamp> <xsl:variable name="date-with-tz" select=" if (has-timezone(wd:Last_Functionally_Updated)) then wd:Last_Functionally_Updated else adjust-dateTime-to-timezone(wd:Last_Functionally_Updated, xs:timezone('-PT8H')) "/> <xsl:value-of select="format-dateTime( adjust-dateTime-to-timezone($date-with-tz, xs:timezone('PT0H')), '[M01]/[D01]/[Y0001] [H01]:[m01]:[s01]' )"/> </time_stamp>
内容的提问来源于stack exchange,提问作者Velsus
相关产品推荐
相关产品推荐

