LUA日期和时间

        Lua标准库提供了2个操作日期和时间的函数。

时间函数 os.time

        不带参数os.time()结果是一个整型数字,该数字代表从纪元(1970-01-01 00:00:00 UTC)起经过的秒数,该数值与时区有关联,在不同时区值的情况下调用会返回不同的值。

                print(os.time())        ->1646988781(北京时区)

        带参数,参数必须是date类型的表,一个date类型的表如下:

{year = 2022,month = 3,day = 11,hour = 16,min = 31,sec = 45,isdst = false,wday = 6,yday = 70}

                year 年份

                month 月份 (1-12)

                day 日 (1-31)

                hour 时

                min 分

                sec 秒

                wday 一周中的星期几 (第一天代表周日)

                yday 一年中的第几天

                isdst 是否使用夏令时

        os.time的参数表中 year、month、day是必须的参数,特别需要注意的是当没有hour值时,默认hour=12, min和sec的默认值则是0。

                print(os.time({year = 2022, month = 3, day = 11}))        ->1646971200 (北京时区)

        在实际的计算中,需要考虑时区带来的问题。

日期函数 os.date (  [format   [, time]]  )

        在某种程度上可以认为os.date是os.time的反函数。

        不带参数 os.date()返回字符串,表示当前的日期,月份 周几 日 时分秒 年份

                print(os.date())  -> Fri Mar 11 16:46:51 2022

        带参数,参数有一些固定的指示符,代表特定的含义。以下是一些常用的指示符

                %y 年份缩写 (22)

                %Y 年份完整 (2022)

                %m 月份

                %d  日,一个月中第几天

                %H  小时,24小时制

                %I   小时,12小时制

                %M  分钟

                %S   秒数

                %w 星期几

                %W  一年中第几周

                %j     一年中第几天

        第一个参数通常是有指示符组成

        第2个参数不存在,默认值是os.time()。

        若第一个参数以 ! 开头时,将会按照格林尼治时间进行格式化。

        若第一个参数是 "*t" 时, 则会返回一个完整的日期表。

                print(os.date("*t"))         ->table: 00000000F86E8AA0

                {year = 2022,month = 3,day = 11,hour = 17,min = 11,sec = 45,isdst = false,wday =         6,yday = 70}

时间差计算函数os.difftime

        可以用以下代码来计算一个系统时区:

function GetSystemTimeZone()
    return os.difftime(os.time(os.date("!*t", os.time())), os.time())   -- 秒
end

常用一些函数封装

        获取当天已过秒数

function GetPassSecInDay()
    local t = os.date("*t", os.time())
    t.hour = 0
    t.min = 0
    t.sec = 0
    return os.time() - os.time(t)
end

常见错误:

        os.time 的时间戳是一个int 32位值的数字,int32最大值是2147483647,对应转成时间是2038-01-19 11:14:07 ,在int32的lua版本中,超过该时间就会报错。

你可能感兴趣的:(Lua初探,lua)