使用XSLT 2.0中的日期/时间戳计算持续时间?

时间:2014-07-31 02:16:07

标签: datetime xslt xslt-2.0

我正在使用XSLT 2.0,并且我正在尝试计算WS-Trust消息,其中包含&和ft和元素,所以我需要确定两个日期/时间戳之间的分数天数例如,在:

之间

2014-06-28T03:00:12Z和2014-06-26T13:00:02Z

我尝试过使用:

<xsl:sequence select="fn:days-from-duration(xs:dateTime('2014-06-26T13:00:02Z')-xs:dateTime('2014-06-27T13:00:02Z'))"/>

但上面只是继续给我&#34; -1&#34;,即一个整数。

如果我可以得到小时或分钟的持续时间,我可能会计算小数天数,但我尝试使用:

<xsl:sequence select="fn:hours-from-duration(xs:dateTime('2014-06-26T13:00:02Z')-xs:dateTime('2014-06-27T13:00:02Z'))"/>

或:

<xsl:sequence select="fn:minutes-from-duration(xs:dateTime('2014-06-26T13:00:02Z')-xs:dateTime('2014-06-27T13:00:02Z'))"/>

那些只是给我&#34; 0&#34;。

有谁能告诉我如何计算持续时间或小时数?

谢谢!

2 个答案:

答案 0 :(得分:1)

days-from-duration()hours-from-duration()minutes-from-duration()提取函数:每个函数从一个持续时间中提取单个组件。在您的示例中,您分别得到-1,0和0,因为两个dateTimes之间的持续时间为-1天,0小时和0分钟。

如果您想将持续时间计算为小数天,请尝试:

<xsl:variable name="duration" select="xs:dateTime('2014-06-27T12:36:00Z')-xs:dateTime('2014-06-26T00:00:00Z')" />

<xsl:value-of select="days-from-duration($duration) + hours-from-duration($duration) div 24 + minutes-from-duration($duration) div 1440"/>

这会返回1.525,表示P1DT12H36M的持续时间(1天,12小时36分钟)。

答案 1 :(得分:1)

减去两个dateTime值以获取dayTimeDuration,然后将其除以xs:dayTimeDuration('P1D')(使用div运算符)以获得xs:double的天数。