【发布时间】:2020-09-23 06:17:28
【问题描述】:
有几种方法可以在Tarantool获得时间:
- 使用
clock模块 - 使用
fiber.time函数 - 使用
os.date
但是处理日期的正确方法是什么?
【问题讨论】:
标签: tarantool
有几种方法可以在Tarantool获得时间:
clock 模块fiber.time函数os.date 但是处理日期的正确方法是什么?
【问题讨论】:
标签: tarantool
首先,Unix epoch 有几个例程:
os.time() — 经典的 Lua 时间函数。有点慢,效率不高。不建议在 tarantool 内部使用来获取当前纪元,但当然可以。可用于获取任意日期的纪元(在本地时区内)。例如:os.time({ year = 2020, month = 6, day = 4 })
将产生1591261200,即我的 GMT+3 时区的 12:00:00
clock.time()(和clock.time64())——高分辨率计时器,几乎原始绑定到clock_gettime。更多信息可从doc获取
fiber.time()(还有fiber.time64())——clock.time 的缓存版本。更新每个事件循环迭代。如果不需要时钟的绝对精度,建议使用。为了将纪元转换为不同的格式和时区,有多种变体:
os.date("<format>" [, epoch ]) — 将纪元转换为本地时区。os.date("!<format>" [, epoch ])(注意 ! 前缀)- 将纪元转换为 GMT 时区。os.date('*t') 表示本地,os.date('!*t') 表示 UTCicu-date 可能被认为是您需要使用不同的时区和/或格式。例如,如果需要UTC时间,可以使用缓存的fiber.time和os.date:
local fiber = require 'fiber'
os.date("!%Y-%m-%dT%H:%M:%SZ", fiber.time())
将在时区独立返回类似2020-06-04T11:48:54Z 的内容
【讨论】:
这取决于你的任务。
如果使用时区/格式等对您很重要。 我建议使用 icu-data 库 (https://github.com/tarantool/icu-date)
【讨论】: