我有两个不同的时间戳,以毫秒为单位。对于这两个时间戳,我想知道它们之间的持续时间。持续时间是正确的计算,但我想格式化这个持续时间然后Eclipse给我这个错误:
变量$ duration的值的必需项类型是xs:string 提供的值具有项目类型xs:dayTimeDuration
<xsl:variable name="start" select='xs:dateTime("1970-01-01T00:00:00") + 1512037112064 * xs:dayTimeDuration("PT0.001S")'/>
<xsl:variable name="end" select='xs:dateTime("1970-01-01T00:00:00") + 1512059856670 * xs:dayTimeDuration("PT0.001S")'/>
<xsl:value-of select="xs:dateTime($end)-xs:dateTime($start)" />
没有任何形成的输出
PT6H19M4.606S
通缉格式化输出
6:19:4.606
答案 0 :(得分:2)
首先,如果您有两个时间戳$endTS
和$startTS
(以毫秒为单位),那么获取它们之间持续时间的最简单方法是
xs:dayTimeDuration('PT0.001S') * ($endTS - $startTS)
您不需要将两者都添加到虚拟开始时间,然后减去两个虚拟日期时间值。
其次,如果您想格式化H:M:S格式的持续时间,那么如果您知道持续时间少于24小时,则可以使用
format-time(xs:time('00:00:00') + $duration, '[H1]:[m1]:[s1].[f000]')
如果您不知道它不到24小时就可以使用
concat(days-from-duration($d)*24 + hours-from-duration($d), ':',
minutes-from-duration($d), ':', seconds-from-duration($d))
我不知道造成类型错误的原因;您显示的代码未声明或使用名为$duration
的变量。