如何在XQuery中计算两个DateTime值的分钟差值?
解决方法:将dayTimeDuration转换为总分钟数
这问题我太熟了!你已经成功解析出两个DateTime并计算出了dayTimeDuration结果,要把它转成总分钟数,直接用XQuery内置的时长分量提取函数做算术计算就搞定了。
完整代码示例
xquery version "0.9-ml"; -- 解析起始和结束时间 let $start-time := xdmp:parse-dateTime("[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01]","2017-01-17T08:00:00") let $end-time := xdmp:parse-dateTime("[Y0001]-[M01]-[D01]T[H01]:[m01]:[s01]","2017-01-17T22:45:00") -- 计算时间差得到dayTimeDuration let $duration := fn:subtract-dateTimes-yielding-dayTimeDuration($start-time, $end-time) -- 转换为总分钟数 let $total-minutes := (fn:days-from-dayTimeDuration($duration) * 24 * 60) + (fn:hours-from-dayTimeDuration($duration) * 60) + fn:minutes-from-dayTimeDuration($duration) return $total-minutes
代码说明
fn:days-from-dayTimeDuration($duration):提取时长中的天数,转成分钟(一天=24*60分钟)fn:hours-from-dayTimeDuration($duration):提取时长中的小时数,转成分钟(一小时=60分钟)fn:minutes-from-dayTimeDuration($duration):提取时长中的分钟数- 三者相加就得到了带符号的总分钟数:你的例子里结果会是
-885,负号表示$start-time早于$end-time(因为你用起始时间减结束时间得到了负时长)
可选:获取绝对值(正的分钟数)
如果只需要时间差的绝对值,给结果套个fn:abs()就行:
return fn:abs($total-minutes)
这样就会返回885,也就是14小时45分钟对应的总分钟数。
内容的提问来源于stack exchange,提问作者coder25
相关产品推荐
相关产品推荐

