如何在Tarantool中正确处理日期?

6

Tarantool 中获取时间的几种方法:

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

但是如何正确处理日期呢?

2个回答

12

首先,Unix纪元有几个常规方法:

  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的原始绑定。可以从文档了解更多信息。
  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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接