【问题标题】:What is the correct way to work with dates in Tarantool?在 Tarantool 中处理日期的正确方法是什么?
【发布时间】:2020-09-23 06:17:28
【问题描述】:

有几种方法可以在Tarantool获得时间:

  • 使用clock 模块
  • 使用fiber.time函数
  • 使用os.date

但是处理日期的正确方法是什么?

【问题讨论】:

    标签: tarantool


    【解决方案1】:

    首先,Unix epoch 有几个例程:

    1. os.time() — 经典的 Lua 时间函数。有点慢,效率不高。不建议在 tarantool 内部使用来获取当前纪元,但当然可以。可用于获取任意日期的纪元(在本地时区内)。例如:
    os.time({ year = 2020, month = 6, day = 4 })
    

    将产生1591261200,即我的 GMT+3 时区的 12:00:00

    1. clock.time()(和clock.time64())——高分辨率计时器,几乎原始绑定到clock_gettime。更多信息可从doc获取
    2. fiber.time()(还有fiber.time64())——clock.time 的缓存版本。更新每个事件循环迭代。如果不需要时钟的绝对精度,建议使用。

    为了将纪元转换为不同的格式和时区,有多种变体:

    1. os.date("<format>" [, epoch ]) — 将纪元转换为本地时区。
    2. os.date("!<format>" [, epoch ])(注意 ! 前缀)- 将纪元转换为 GMT 时区。
    3. 为了将日期的组成部分作为表格,我们可以使用 os.date('*t') 表示本地,os.date('!*t') 表示 UTC
    4. icu-date 可能被认为是您需要使用不同的时区和/或格式。

    例如,如果需要UTC时间,可以使用缓存的fiber.timeos.date

    local fiber = require 'fiber'
    os.date("!%Y-%m-%dT%H:%M:%SZ", fiber.time())
    

    将在时区独立返回类似2020-06-04T11:48:54Z 的内容

    【讨论】:

      【解决方案2】:

      这取决于你的任务。

      如果使用时区/格式等对您很重要。 我建议使用 icu-data 库 (https://github.com/tarantool/icu-date)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-29
        • 2021-10-30
        相关资源
        最近更新 更多