您应该使用xs:dayTimeDuration
或xs:yearMonthDuration
定义为substracting operators。
为了证明这一点,这XQuery的:
let $now := current-dateTime()
let $month := xs:dayTimeDuration("P30D")
let $month_ago := $now - $month
return $month_ago
输出:
2011-03-23T14:32:47.156-03:00
在测试了撒克逊,Altova的,XQSharp。
从http://www.w3.org/TR/xpath20/#mapping,这是操作员映射:
Operator | Type(A) | Type(B) | Function
A - B | numeric | numeric | op:numeric-subtract(A, B)
A - B | xs:date | xs:date | op:subtract-dates(A, B)
A - B | xs:date | xs:yearMonthDuration | op:subtract-yearMonthDuration-from-date(A, B)
A - B | xs:date | xs:dayTimeDuration | op:subtract-dayTimeDuration-from-date(A, B)
A - B | xs:time | xs:time | op:subtract-times(A, B)
A - B | xs:time | xs:dayTimeDuration | op:subtract-dayTimeDuration-from-time(A, B)
A - B | xs:dateTime | xs:dateTime | op:subtract-dateTimes(A, B)
A - B | xs:dateTime | xs:yearMonthDuration | op:subtract-yearMonthDuration-from-dateTime(A, B)
A - B | xs:dateTime | xs:dayTimeDuration | op:subtract-dayTimeDuration-from-dateTime(A, B)
A - B | xs:yearMonthDuration | xs:yearMonthDuration | op:subtract-yearMonthDurations(A, B)`
感谢您的答案。我尝试更换第二行: 'let $ month:= xs:dayTimeDuration(“P30D”)' 并且得到相同的错误。有什么建议么? – 2011-04-22 17:03:47
谢谢你扩大答案,但正如我所说,它仍然不可以在可可。 – 2011-04-22 18:00:43