我使用的是XSLT 2.0,并且正在尝试计算WS-Trust消息中的,其中有和元素,因此我需要确定两个日期/时间戳之间的天数,例如:
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'))"/>
但是上面给我的结果是"-1",也就是一个整数。
如果我可以得到小时或分钟的持续时间,我可能会计算小数天,但我尝试使用:
<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'))"/>
这两个都给了我"0“。
谁能告诉我如何计算以小时或分钟为单位的持续时间?
谢谢!
发布于 2014-07-31 04:18:14
days-from-duration()
、hours-from-duration()
和minutes-from-duration()
是extraction函数:每个函数都从持续时间中提取单个组件。在您的示例中,您将分别获得-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分钟)。
发布于 2014-07-31 20:42:38
减去两个双精度值得到一个双精度值,然后将其除以xs:dayTimeDuration('P1D')
(使用div
运算符),得到xs: dateTime形式的天数。
https://stackoverflow.com/questions/25049795
复制