如何将UTC秒转换为时间字符串?

时间:2014-06-02 14:56:59

标签: xml xpath

如何将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。

1 个答案:

答案 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