变量$ duration的值的必需项类型是xs:字符串提供的值具有项类型xs:dayTimeDuration

时间:2018-03-11 18:14:35

标签: xml xslt-2.0

我有两个不同的时间戳,以毫秒为单位。对于这两个时间戳,我想知道它们之间的持续时间。持续时间是正确的计算,但我想格式化这个持续时间然后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

1 个答案:

答案 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的变量。