Lua 日期和时间

一、os.time(table)

用于获取相应的时间的时间戳

参数:

  • table:可选,日期表,表中使用以下字段
字段 类型 含义 是否必须
year number(整型) 必须要有
month number(整型) 必须要有
day number(整型) 必须要有
hour number(整型) 可选,默认为 12 (12:00:00)
min number(整型) 可选,默认为 00
sec number(整型) 可选,默认为 00
wday number(整型) 本周第几天(第一天为星期天) 会被忽略
yday number(整型) 当年中第几天(第一天为 1 月 1 日) 会被忽略
isdst bool 使用夏时令则为真,其余则为假 可选,默认为 nil

值得注意的是,日期表中不包括时区,所以程序需要负责结合相应的时区对其正确解析。

返回值:

时间戳

1-1、使用

第一种:直接调用,不传递参数,获取当前系统的时间戳(相对于 Jan 01,1970,0:00 UTC )

print(os.time())        --> 1665536638      (现在是 2022-10-12 09:03:58)

可以将时间戳进行拆解,得到我们需要的时间

需要注意是,时间戳是基于格林尼治,而我们北京时间是东八区,所以需要增加八小时。例子中解析出来是一点,所以增加八小时就刚好九点

do
    local day2year = 365.242
    local sec2hour = 60 * 60
    local sec2day = sec2hour * 24
    local sec2year = sec2day * day2year
    function getYear(timestamp)
        -- 时间戳是从 Jan 01,1970,0:00 UTC 开始
        return timestamp // sec2year + 1970
    end
    function getHour(timestamp)
        return timestamp % sec2day // sec2hour
    end
    function getMinute(timestamp)
        return timestamp % sec2hour // 60
    end
    function getSecond(timestamp)
        return timestamp % 60
    end
end

-- 1665536638 --> 2022-10-12 09:03:58
timestamp = 1665536638
print("timestamp", timestamp)           --> timestamp	1665536638
print("year", getYear(timestamp))       --> year	2022.0
print("hour", getHour(timestamp))       --> hour	1
print("minute", getMinute(timestamp))   --> minute	3
print("second", getSecond(timestamp))   --> second	58

第二种:日期表作为参数调用 os.time ,返回值则为该表中所描述日期和时间对应的数字。

local timeTable = {
   
    -- 必填项 year、month、day
    year = 2022,
    month = 4,
    day = 14,
    -- 选填项 hour、minute、second,不填默认为 12:00:00
    hour = 13,
    min = 10,
    sec = 10,
    -- 选填项 isdst,默认为 nil
    isdst = false
    -- wday、yday 填了也会被忽略
}
print("isdst = false", os.time(timeTable))      --> isdst = false	1649913010

timeTable.isdst = true
print("isdst = true", os.time(timeTable))       --> isdst = true	1649909410

值得一提:

hourminsec 可以是任意值,既可以是负数,则表示回退时间,也可以是超过 24 小时或是 60 分、60 秒的值,则表示前进相应时间。

--- 表示前进了 5 天
print(os
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值