跳转到内容

操作系统时间

标准 Lua os 时间函数。提供用于时间戳、日期格式化和时间计算的真实墙上时钟时间。

全局 os 表。无需 require。

os.time()
os.date()
os.clock()
os.difftime()

获取 Unix 时间戳(自 1970 年 1 月 1 日 UTC 以来的秒数):

-- 当前时间戳
local now = os.time() -- 1718462445
-- 指定日期/时间
local t = os.time({
year = 2024,
month = 12,
day = 25,
hour = 10,
min = 30,
sec = 0
})

签名: os.time([spec]) -> number

参数:

字段类型默认值描述
yearnumber当前年份四位数年份(例如 2024)
monthnumber当前月份月份 1-12
daynumber当前日期月中日期 1-31
hournumber0小时 0-23
minnumber0分钟 0-59
secnumber0秒 0-59

不带参数调用时返回当前 Unix 时间戳。

带表调用时,任何缺失的字段使用上面显示的默认值。yearmonthday 字段如果未指定则默认为当前日期。

-- 仅日期(时间默认为午夜)
os.time({year = 2024, month = 6, day = 15})
-- 部分指定(填充当前年/月)
os.time({day = 1}) -- 当月第一天

将时间戳格式化为字符串或返回日期表:

local now = os.time()

— 默认格式 os.date() — “Sat Jun 15 14:30:45 2024”

— 自定义格式 os.date(“%Y-%m-%d”, now) — “2024-06-15” os.date(“%H:%M:%S”, now) — “14:30:45” os.date(“%Y-%m-%dT%H:%M:%S”, now) — “2024-06-15T14:30:45”

— UTC 时间(格式前加 !) os.date(”!%Y-%m-%d %H:%M:%S”, now) — UTC 而非本地时间

— 日期表 local t = os.date(“*t”, now)

签名: os.date([format], [timestamp]) -> string | table

参数类型默认值描述
formatstring"%c"格式字符串,"*t" 返回表
timestampnumber当前时间要格式化的 Unix 时间戳
代码输出示例
%Y4 位年份2024
%y2 位年份24
%m月份 (01-12)06
%d日期 (01-31)15
%H24 小时制小时 (00-23)14
%I12 小时制小时 (01-12)02
%M分钟 (00-59)30
%S秒 (00-59)45
%pAM/PMPM
%A星期全名Saturday
%a星期缩写Sat
%B月份全名June
%b月份缩写Jun
%w星期几 (0-6, Sunday=0)6
%j年中日 (001-366)167
%U周数 (00-53)24
%z时区偏移-0700
%Z时区名称PDT
%c完整日期/时间Sat Jun 15 14:30:45 2024
%x仅日期06/15/24
%X仅时间14:30:45
%%字面 %%

当格式为 "*t" 时返回表:

local t = os.date("*t")
字段类型描述示例
yearnumber四位数年份2024
monthnumber月份 (1-12)6
daynumber月中日期 (1-31)15
hournumber小时 (0-23)14
minnumber分钟 (0-59)30
secnumber秒 (0-59)45
wdaynumber星期几 (1-7, Sunday=1)7
ydaynumber年中日 (1-366)167
isdstboolean夏令时false

使用 "!*t" 获取 UTC 日期表。

获取 Lua 运行时启动以来经过的秒数:

local start = os.clock()
-- 执行工作
for i = 1, 1000000 do end
local elapsed = os.clock() - start
print(string.format("Took %.3f seconds", elapsed))

签名: os.clock() -> number

获取两个时间戳之间的差值(秒):

local t1 = os.time({year = 2024, month = 1, day = 1})
local t2 = os.time({year = 2024, month = 12, day = 31})
local diff = os.difftime(t2, t1) -- t2 - t1
local days = diff / 86400
print(days) -- 365

签名: os.difftime(t2, t1) -> number

参数类型描述
t2number较晚的时间戳
t1number较早的时间戳

返回 t2 - t1(秒)。如果 t1 > t2 可能为负数。

标识运行时的常量:

os.platform -- "wippy"