函数 os.date
在一定程度上是函数 os.time
的反函数(尽管这个函数的名字写的是 date
),它可以将一个表示日期和时间的数字转换为某些高级的表达形式,要么是日期表,要么是字符串。该函数的第一个参数是描述期望表示形式的格式化字符串,第二个参数是数字形式的日期和时间(如果不提供,则默认为当前日期和时间)。
要生成一个日期表,可以使用格式化字符串" *t
"。例如,调用函数 os.date("*t", 1647351282)
会返回下列表:
{ year = 2022, month = 3, day = 15, yday = 74, wday = 3, hour = 21, min = 34, sec = 42, isdst = false }
大致上,对于任何有效的时间 t
, os.time(os.date("*t", t)) == t
均成立。
除了 isdst
,结果中的其余字段均为整型数且范围分别是:
字段 | 范围 |
year |
一整年 |
month |
[1, 12] |
day |
[1, 31] |
hour |
[0, 23] |
min |
[0, 59] |
sec |
[0, 60] |
wday |
[1, 7] |
yday |
[1, 366] |
提示
秒的最大范围是 60
,允许闰秒的存在。
对于其他格式化字符串,函数 os.date
会将日期格式化为一个字符串,该字符串是根据指定的时间和日期信息对特定的指示符进行了替换的结果。所有的指示符都以百分号开头紧跟一个字母,例如:
print(os.date("a %A in %B")) --> a Tuesday in March print(os.date("%d/%m/%Y", 1647351282)) --> 15/03/2022
所有的表现形式取决于当前的区域设置。
下表列出了主要的指示符:
指示符 | 含义 | 示例 |
%a |
星期几的简写 | Wed |
%A |
星期几的全名 | Wednesday |
%b |
月份的简写 | Sep |
%B |
月份的全名 | September |
%c |
日期和时间 | 09/16/22/ 23:48:10 |
%d |
一个月中的第几天 | 16 |
%H |
24 小时制中的小时数 |
23 |
%I |
12 小时制中的小时数 |
11 |
%j |
一年中的第几天 | 2`59 |
%m |
月份 | 09 |
%M |
分钟 | 48 |
%p |
" am "或" pm " |
pm |
%S |
秒数 | 10 |
%w |
星期 | 3 |
%W |
一年中的第几周 | 37 |
%x |
日期 | 09/16/22 |
%X |
时间 | 23:48:10 |
%y |
两位数的年份 | 22 |
%Y |
完整的年份 | 2022 |
%z |
时区 | +0800 |
%% |
百分号 |
如果格式化字符串以叹号开头,那么函数 os.date
会以 UTC
格式对其进行解析:
print(os.date("!%c", 0)) --> Thu Jan 1 00:00:00 1970