一、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
值得一提:
hour
、min
、sec
可以是任意值,既可以是负数,则表示回退时间,也可以是超过 24 小时或是 60 分、60 秒的值,则表示前进相应时间。
--- 表示前进了 5 天
print(os