如何将UTC秒转换为此格式:
00 h, 00 min, 00 sec
此代码不起作用:
concat(floor(Duration/DurationUTC div 360) mod 24,' h ',
floor(Duration/DurationUTC div 60) mod 60,' min ',
Duration/DurationUTC mod 60,' sec')
我正在使用XPath 1.0。
答案 0 :(得分:2)
如果您的秒数在以下结构中,它应该有效:
<Duration><DurationUTC>84341</DurationUTC></Duration>
如果您在正确的上下文中调用XPath表达式。
但每次达到24小时,它就变为零。也许这就是你遇到的错误。如果您不想要这种行为,请删除mod
表达式:
concat(
floor(/Duration/DurationUTC div 3600),' h ',
floor(/Duration/DurationUTC div 60) mod 60,' min ',
/Duration/DurationUTC mod 60,' sec')
现在,对于上面的示例,它将生成:
23 h 25 min 41 sec
XPath 1.0中没有数字格式,但是如果你想要 padding 两个数字,你所描述的格式00 h, 00 min, 00 sec
,你可以 hack 使用。它使用转换后的结果作为谓词来选择或不选择存储值的节点,然后获取一个中的数字节点,将其转换为0
并在计算值小于10时使用该字符进行填充:
concat(
translate(substring(/Duration/DurationUTC[floor(/Duration/DurationUTC div 3600) < 10],1,1),'0123456789','0000000000'),
floor(/Duration/DurationUTC div 3600),' h ',
translate(substring(/Duration/DurationUTC[floor(/Duration/DurationUTC div 60) mod 60 < 10],1,1),'0123456789','0000000000'),
floor(/Duration/DurationUTC div 60) mod 60,' min ',
translate(substring(/Duration/DurationUTC[floor(/Duration/DurationUTC mod 60) < 10],1,1),'0123456789','0000000000'),
/Duration/DurationUTC mod 60,' sec'
)
现在,如果你有:
<Duration><DurationUTC>3970</DurationUTC></Duration>
而不是:
1 h 6 min 10 sec
你得到:
01 h 06 min 10 sec