XQuery 中是不是有任何方法可以获取自某个 Epoch 以来的当前时间(以毫秒为单位)?
Posted
技术标签:
【中文标题】XQuery 中是不是有任何方法可以获取自某个 Epoch 以来的当前时间(以毫秒为单位)?【英文标题】:Is there any way in XQuery to get the current time in milliseconds since some Epoch?XQuery 中是否有任何方法可以获取自某个 Epoch 以来的当前时间(以毫秒为单位)? 【发布时间】:2011-11-20 21:26:18 【问题描述】:XQuery
提供了各种date/time
函数,例如current-dateTime()
,但是我似乎找不到一个可以让我自 Epoch 以来的 毫秒 时间的函数。提取小时、分钟和秒的函数似乎也单独存在。
在XQuery
中获取 Epoch 时间(即 unix 时间或类似时间)的正确方法是什么?
【问题讨论】:
【参考方案1】:(current-dateTime() - xs:dateTime("1970-01-01T00:00:00-00:00")) div xs:dayTimeDuration('PT0.001S')
返回秒数作为持续时间,然后除以 1 毫秒得到毫秒数。
【讨论】:
谢谢,我认为 dateTime 之后有一个额外的右括号,为了正确执行,它需要是 xs:dateTime。 始终使用单引号或双引号可能是个好主意。如果这被用作 XSLT 标记的select
属性的值,那么它将与该属性的引号冲突。
这是什么 1970-01-01?你为什么用这个减去 currentTime?
在 Unix 世界中,1970 年初被称为“纪元”,这就是问题所要求的。【参考方案2】:
感谢您的提示。我修改了 Oracle Service Bus 11g (OSB 11g) Xpath 编辑器的代码,以防其他人需要它
(fn:current-dateTime() - xs:dateTime("1970-01-01T00:00:00-00:00")) div xdt:dayTimeDuration("PT0.001S")
【讨论】:
如果我使用它作为请求的唯一键,是否有可能在高负载期间 2 个请求可以具有相同的时间戳?【参考方案3】:关于 Aditya 的答案 OSB 11g 的其他技巧。
XQ 编辑器上有一个烦人的错误,它将 div 和 operator 更改为 ,(逗号)。
只需在该代码前面放置一个转换函数即可。比如xs:long,xs:string
例如
xs:long((fn:current-dateTime() - xs:dateTime("1970-01-01T00:00:00-00:00")) div xdt:dayTimeDuration("PT0.001S"))
【讨论】:
以上是关于XQuery 中是不是有任何方法可以获取自某个 Epoch 以来的当前时间(以毫秒为单位)?的主要内容,如果未能解决你的问题,请参考以下文章