操作系统时间
操作系统时间
Section titled “操作系统时间”标准 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
参数:
| 字段 | 类型 | 默认值 | 描述 |
|---|---|---|---|
year | number | 当前年份 | 四位数年份(例如 2024) |
month | number | 当前月份 | 月份 1-12 |
day | number | 当前日期 | 月中日期 1-31 |
hour | number | 0 | 小时 0-23 |
min | number | 0 | 分钟 0-59 |
sec | number | 0 | 秒 0-59 |
不带参数调用时返回当前 Unix 时间戳。
带表调用时,任何缺失的字段使用上面显示的默认值。year、month 和 day 字段如果未指定则默认为当前日期。
-- 仅日期(时间默认为午夜)os.time({year = 2024, month = 6, day = 15})
-- 部分指定(填充当前年/月)os.time({day = 1}) -- 当月第一天将时间戳格式化为字符串或返回日期表:
— 默认格式 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
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
format | string | "%c" | 格式字符串,"*t" 返回表 |
timestamp | number | 当前时间 | 要格式化的 Unix 时间戳 |
| 代码 | 输出 | 示例 |
|---|---|---|
%Y | 4 位年份 | 2024 |
%y | 2 位年份 | 24 |
%m | 月份 (01-12) | 06 |
%d | 日期 (01-31) | 15 |
%H | 24 小时制小时 (00-23) | 14 |
%I | 12 小时制小时 (01-12) | 02 |
%M | 分钟 (00-59) | 30 |
%S | 秒 (00-59) | 45 |
%p | AM/PM | PM |
%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")| 字段 | 类型 | 描述 | 示例 |
|---|---|---|---|
year | number | 四位数年份 | 2024 |
month | number | 月份 (1-12) | 6 |
day | number | 月中日期 (1-31) | 15 |
hour | number | 小时 (0-23) | 14 |
min | number | 分钟 (0-59) | 30 |
sec | number | 秒 (0-59) | 45 |
wday | number | 星期几 (1-7, Sunday=1) | 7 |
yday | number | 年中日 (1-366) | 167 |
isdst | boolean | 夏令时 | false |
使用 "!*t" 获取 UTC 日期表。
测量经过时间
Section titled “测量经过时间”获取 Lua 运行时启动以来经过的秒数:
local start = os.clock()
-- 执行工作for i = 1, 1000000 do end
local elapsed = os.clock() - startprint(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 - t1local days = diff / 86400print(days) -- 365签名: os.difftime(t2, t1) -> number
| 参数 | 类型 | 描述 |
|---|---|---|
t2 | number | 较晚的时间戳 |
t1 | number | 较早的时间戳 |
返回 t2 - t1(秒)。如果 t1 > t2 可能为负数。
标识运行时的常量:
os.platform -- "wippy"