Xquery返回字符串而不是格式化日期

时间:2013-11-20 15:41:53

标签: xml date datetime xquery documentum

我在XML存储库Xhive上运行一个简单的Xquery,并且在为日期返回的值时遇到问题:

的Xquery:

for $x in document('')[matches(xhive:metadata(., "docato-name"),"THOCEO")][xhive:metadata(., "docato-type") = 'XML_RESOURCE_TYPE']
return
<file>
      <filename>{xhive:metadata($x, "docato-name")}</filename>
      <validated>{xhive:metadata($x,"Last Modified")}</validated>
</file>

结果:

<result>
    <file>
        <filename>THOCEO</filename>
        <validated>1375875821721</validated>
    </file>
</result>

我希望“上次修改日期”作为格式化日期返回,因为它出现在存储库中:“2013-08-07 12:43:41”不像上面的字符串那样(“1375875821721”)

我已尝试将查询修改为“{xs:date(xhive:metadata($ x,”Last Modified“))}”但这会失败并显示错误:

query:8:19:XQUERY_ERROR_VALUE: casting error, cannot cast '1375875821721' from xdt:untypedAtomic to {http://www.w3.org/2001/XMLSchema}date (FORG0001: Invalid value for cast/constructor.)

任何帮助将“上次修改”日期作为格式化日期返回将非常感谢!

谢谢!

2 个答案:

答案 0 :(得分:3)

是的我会说使用xhive:last-modified(...)是最简单的方法,但是如果你真的想使用时间戳,那么这里是我过去使用过的东西:

declare function local:timestamp-to-dateTime($v) as xs:dateTime { 
  xs:dateTime("1970-01-01T00:00:00-00:00") + xs:dayTimeDuration(concat("PT", $v idiv 1000, "S"))
};

local:timestamp-to-dateTime(number("1375875821721"))

答案 1 :(得分:0)

我不确定该数字代表什么或如何解析它,但您可以尝试使用xhive:last-modified()代替xs:dateTime

<validated>{ xhive:last-modified(fn:document-uri($x)) }</validated>