如何在XSLT 2.0中为时间戳增加一小时?
给XSLT 2.0中的时间戳增加一小时的解决方案
嘿,作为XSLT初学者碰到时间处理的问题太正常了,我来帮你搞定这个需求!
首先得说,直接对格式化后的字符串做"加1小时"的字符串拼接是很容易踩坑的——比如碰到23:00的情况,加1小时应该变成次日的00:00,字符串处理起来会特别麻烦。好在XSLT 2.0原生支持日期时间类型的运算,咱们用这个方法更靠谱。
核心思路
把你的$completed变量(假设它本身是xs:dateTime类型)直接和1小时的时长相加,然后再用format-dateTime格式化输出就好。XSLT会自动处理跨天、跨月这些边界情况,完全不用你手动判断。
修改后的代码示例
<Date1 DateStart="{format-dateTime($completed, '[Y0001]-[M01]-[D01]T[H01]:00:00Z')}" /> <Date2 DateStart="{format-dateTime($completed + xs:dayTimeDuration('PT1H'), '[Y0001]-[M01]-[D01]T[H01]:00:00Z')}" />
额外提醒:如果$completed是字符串类型
要是你的$completed不是原生的xs:dateTime,而是字符串格式的时间戳,那得先把它转换成日期时间类型再做运算,代码改成这样:
<Date2 DateStart="{format-dateTime(xs:dateTime($completed) + xs:dayTimeDuration('PT1H'), '[Y0001]-[M01]-[D01]T[H01]:00:00Z')}" />
这里的xs:dayTimeDuration('PT1H')是XSLT里表示"1小时"的标准写法,P代表周期(Period),T代表时间部分(Time),1H就是1小时,类似的PT30M就是30分钟,很好记。
内容的提问来源于stack exchange,提问作者Eki
相关产品推荐
相关产品推荐

