在Lua中将时间戳转换成ISO 8601格式

如何在 Lua 中将时间戳转换为 ISO 8601 格式(例如 2009-01-28T21:49:59.000Z)?

我特别想通过在 Nginx 中使用 HttpLuaModule 来实现。

点赞
用户107090
用户107090

如果t在自纪元以来的秒数中具有日期,则尝试os.date("!%Y-%m-%dT%TZ")os.date("!%Y-%m-%dT%TZ",t)

2013-11-21 21:12:10
用户2346535
用户2346535

你也可以使用:

local now_date_time = os.date("!%Y%m%dT%H%M%S") --> 对于 date_time: 20191015T042028Z

local now_date = os.date("!%Y%m%d") --> 只获取日期:20191015
2019-10-15 04:22:29
用户1624512
用户1624512

您要求包含毫秒,因此需要进行一些操作,因为 os.date 格式不允许毫秒。

这适用于在 Nginx 下运行时使用(这是您提问的上下文)。

-- 返回一个 ISO 8061 格式的 UTC(Z)时间戳
-- @return 例如 2021-09-21T15:20:44.323Z
local function iso_8061_timestamp()
    local now = ngx.now()                               -- 1632237644.324
    local ms = math.floor((now % 1) * 1000)             -- 323 或 324(四舍五入)
    local epochSeconds = math.floor(now)
    return os.date("!%Y-%m-%dT%T", epochSeconds) .. "." .. ms .. "Z"  -- 2021-09-21T15:20:44.323Z
end

注意这里有一个有用的日期格式参考链接: https://developpaper.com/lua-os-date-notes/

2021-09-21 15:30:26