思维导图

首先我们看一张思维导图:

备注:

1. 纪元:一个固定日期,在 POSIX 和 Windows 平台中这个固定日期是 Jan 01, 1970, 00:00 UTC。

2. 日期表:在 lua 中表示时间的一种方式,这个表具有以下几个重要字段:year、month、day、hour、 min、sec、wday、yday、isdst。

  • wday:本周中的第几天(第一天是星期日)

  • yday:当年中的第几天

  • isdst:布尔类型。如果使用夏令时则为真。

  • 例如:Sep 16,1998,23:48:10 用日期表的格式表示为:
    {year=1998, month=9, day=16, yday=259, wday=4, hour=23, min=48, sec=10, isdst=false}

日期表中各个参数的范围如下:(秒的最大范围是60,允许闰秒的存在。)

字段 范围
year 一整年
month 1~12
day 1~31
hour 0~23
min 0~59
sec 0~60
wday 1~7
yday 1~366

3. os.clock():在性能测试中,可用来记录程序的运行时间。如下:

1
2
3
local x = os.clock()

print(os.clock() - x)

实际使用

1. 获取当前时间的整数表达

1
2
-- 当前时间为 2019-10-8 19:00:00
print(os.time()) -- 1570532400

2. 获取当前时间的格式化表示

1
2
-- 当前时间为 2019-10-8 19:00:00
print(os.date()) -- Tue Oct 8 19:00:00 2019

3. 获取指定天数之后的日期

下面我们先看一个计算当前天数 40 天之后的日期的例子:

1
2
3
4
5
6
7
8
9
10
11
12
-- 当前时间为 2019-10-8 19:00:00
t = os.date("*t") -- 获取当前日期
print(os.date("%Y/%m/%d", os.time(t))) -- 2019-10-8
print(t.day, t.month) -- 8 10
t.day = t.day + 40
print(t.day, t.month) -- 48 10
print(os.date("%Y/%m/%d", os.time(t))) -- 2019-11-17 (归一化)
t = os.date("*t", os.time(t))
print(t.day, t.month) -- 17 11 -- 2019-11-17 (归一化)
t.month = t.month + 1
print(t.day, t.month) -- 17 12
print(os.date("%Y/%m/%d", os.time(t))) -- 2019-12-17

在上面的例子中,我们看到,在加完天数之后,我们先将我们的日期表使用 os.time() 转换成整数,然后再用 os.date() 就可以做到日期的归一化显示。