在 Tarantool 中处理日期的正确方法是什么?

And*_*rey 5 tarantool

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

  • 使用clock模块
  • 使用fiber.time功能
  • 使用 os.date

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

Mon*_*son 9

首先,Unix epoch 有几个例程:

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

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

  1. clock.time()(和clock.time64()) — 高分辨率计时器,几乎原始绑定到clock_gettime. 更多信息可以从文档中获取
  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 时间,可以使用 cached fiber.timewith os.date

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

2020-06-04T11:48:54Z在时区独立返回类似的东西