【问题标题】: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 时间或类似时间)的正确方法是什么?

【问题讨论】:

    标签: xpath xquery


    【解决方案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 编辑器上有一个烦人的错误,它将 divoperator 更改为 ,(逗号)。

    只需在该代码前面放置一个转换函数即可。比如xs:long,xs:string

    例如

    { xs:long((fn:current-dateTime() - xs:dateTime("1970-01-01T00:00:00-00:00")) div xdt:dayTimeDuration("PT0.001S")) }
    

    【讨论】:

      猜你喜欢
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      • 2011-10-25
      • 2017-02-20
      • 2017-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多