LUA时间和日期


时间和日期相关库函数

时间戳:os.time ([table])

无参数时返回以纪元时间1970年1月1日8时0分0秒到当前时间的秒数

可选参数table:以时间表作为参数返回该表所描述的时间戳

时间表有效字段:{year = 1970, month = 1, day = 1, hour = 8, min = 0, sec = 0}

时间戳差值:os.difftime (t1, t2)

返回两个时间戳的差值

参数t:os.time()返回的时间戳

CPU时钟:os.clock ()

返回当前程序占用的CPU时钟

格式化输出时间:os.date ([format [,time])

返回格式化日期时间或表,无参数时默认按%c格式返回当前日期时间字符串。

可选参数format:格式化表示形式 (类似C语言的prinrf),可选参数time:指定时间戳,无参数默认为当前时间戳。

当format参数为"*t"时会返回当前日期时间表,字段如下:

do
    for k,v in pairs (os.date("*t")) do
        print (k, v)
    end
end

--[[
    sec    58 秒
    min    18 分
    hour   21 小时
    day    2  日
    month  1  月
    year   2022 年份
    wday   1  周当中的天,周日为1
    yday   2  年当中的天
--]]



格式控制符表

%a -- 星期简写
%A -- 星期全称
%b -- 月份简写
%B -- 月份全称
%c -- 操作系统默认的日期时间完整格式
%d -- 一个月中的第几天
%H -- 小时,24小时制
%I -- 小时,12小时制
%j -- 一年中的第几天
%m -- 月份
%M -- 分钟
%p -- AM/PM
%S -- 秒数
%w -- 星期
%W -- 一年中的第几周
%x -- 日期,日/月/年
%X -- 时间,时/分/秒
%y -- 年份,两位数形式
%Y -- 年份,完整形式
%z -- 时区
%% -- 转义百分号

例如:

print (os.date ("%Y-%m-%d %A %H:%M:%S"))

输出结果:2022-01-02 Sunday 21:53:51,格式化控制字符串后面无参数时默认为当前时间,当然也可以指定时间戳。

时间和日期的自动归一演示

do
    t = os.date("*t")           -- 获取当前时间表
    print (os.date("%Y-%m-%d")) -- 2022-01-03
    t.day = t.day + 57          -- 日期增加57天
    print (os.date("%Y-%m-%d", os.time(t))) -- 按指定格式输出以t表为时间戳的日期,2022-03-01
end