【问题标题】:UniVerse native date format宇宙本机日期格式
【发布时间】:2012-10-31 20:09:29
【问题描述】:

我正在优化一些使用 UniObjects 的 UniVerse 数据访问代码。经过一些实验,似乎使用 UniSession.OConv 调用来解析某些东西,例如十进制数(大多数我们有 MR4 或 MR2 或 MR2$)和日期(几乎都是 D2/)非常慢(我认为它可能回调服务器进行解析)。

我已经为 MR*[$] 代码构建了一个解析器,但我想知道它们存储的日期,因此我可以为 D2/ 构建一个解析器。通常它们似乎存储为 5 位数字。我认为这可能是自我们的 UniVerse 服务器在 HP-UX 上运行以来的 Unix 纪元以来的天数,但是在找到“15766”作为最后修改日期并将其乘以 86400(每天的秒数)之后,我得到了 2013 年 3 月 2 日这作为最后修改日期没有意义,因为据我所知,这仍然是在未来。

有谁知道这些日期数字的时基是什么?

【问题讨论】:

    标签: date timestamp universe


    【解决方案1】:

    它存储为天数。只需在 0 上进行转换,您就会得到开始日期。

    编辑:

    正如 Los 所指出的,UniVerse(和 UniData)中使用的 Epoch 是1967 年 12 月 31 日

    【讨论】:

    • 我知道基数是 1967 年 12 月 31 日。做 OConv("15766", "D2/") 和 (new DateTime(1967, 12, 31)).AddDays(15766) 给了我同样的东西。非常感谢!
    • 只是给出一些统计数据:将 1000 个随机整数转换为 0 到 16000 之间的日期,OConv 的平均每次转换时间为 1.2561 毫秒,日期时间加法方法的每次转换平均时间为 0.002 毫秒。
    【解决方案2】:

    在 Universe 和任何其他 Pick 数据库中,日期和时间存储为单独的值。

    内部日期是 1967 年 12 月 31 日之前或之后的天数,即第 0 天。

    内部时间是午夜后的秒数。它可以存储为小数,但不是正常的。

    【讨论】:

      【解决方案3】:

      在 TCL 中有一个CDT 命令(代表转换日期)将日期从人类可读转换为数字,反之亦然:

      CDT 9/28/2017 
       * Result: 18169  
      
      CDT 18169     
       * Result: 09/28/2017     
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-19
        • 1970-01-01
        相关资源
        最近更新 更多