如何在Lua中将时间戳转换为ISO 8601格式(例如2009-01-28T21:49:59.000Z
)?
我特别想使用Nginx中的HttpLuaModule来实现。
如果t
是自纪元以来的秒数,则尝试os.date(“!%Y-%m-%dT%TZ”)
或os.date(“!%Y-%m-%dT%TZ”,t)
。
您要求包含毫秒,因为os.date格式不允许毫秒,所以需要进行一些技巧。
在运行Nginx时(这是您提出问题的上下文),此方法有效。
-- Return a ISO 8061 formatted timestamp in UTC (Z)
-- @return e.g. 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 or 324 (rounding)
local epochSeconds = math.floor(now)
return os.date("!%Y-%m-%dT%T", epochSeconds) .. "." .. ms .. "Z" -- 2021-09-21T15:20:44.323Z
end
或者你可以使用:
local now_date_time = os.date("!%Y%m%dT%H%M%S") --> For date_time: 20191015T042028Z
local now_date = os.date("!%Y%m%d") --> For only date: 20191015
bad argument #1 to 'date' (invalid conversion specifier '%TZ')
。修复后的版本为:os.date("!%Y-%m-%dT%H:%M:%SZ")
。 - Phrogz