lua os.date函数定义和示例

os.date函数定义

  • 原型:os.date ([format [, time]])
  • 解释:返回一个按format格式化日期、时间的字串或表。

lua源码中os.date的注释如下:

---
--- Returns a string or a table containing date and time, formatted according
--- to the given string `format`.
---
--- If the `time` argument is present, this is the time to be formatted (see
--- the `os.time` function for a description of this value). Otherwise,
--- `date` formats the current time.
---
--- If `format` starts with '`!`', then the date is formatted in Coordinated
--- Universal Time. After this optional character, if `format` is the string
--- "`*t`", then `date` returns a table with the following fields:
---
--- **`year`** (four digits)
--- **`month`** (1–12)
--- **`day`** (1-31)
--- **`hour`** (0-23)
--- **`min`** (0-59)
--- **`sec`** (0-61), due to leap seconds
--- **`wday`** (weekday, 1–7, Sunday is 1)
--- **`yday`** (day of the year, 1–366)
--- **`isdst`** (daylight saving flag, a boolean). This last field may be absent
--- if the information is not available.
---
--- If `format` is not "`*t`", then `date` returns the date as a string,
--- formatted according to the same rules as the ISO C function `strftime`.
---
--- When called without arguments, `date` returns a reasonable date and time
--- representation that depends on the host system and on the current locale.
--- (More specifically, `os.date()` is equivalent to `os.date("%c")`.)
---
--- On non-POSIX systems, this function may be not thread safe because of its
--- reliance on C function `gmtime` and C function `localtime`.
---@overload fun():string|table
---@param format string
---@param time number
---@return string|table
function os.date(format, time) end

os.date格式符对照表

os.date ([format [, time]])

由原型可以看出可以省略第二个参数也可以省略两个参数,

只省略第二个参数函数会使用当前时间作为第二个参数,

如果两个参数都省略则按当前系统的设置返回格式化的字符串,做以下等价替换 os.date() <=> os.date("%c")。

如果format以 “!” 开头,则按格林尼治时间进行格式化。

如果format是一个 “t” ,将返一个带year(4位),month(1-12), day (1--31), hour (0-23), min (0-59),sec (0-61),wday (星期几, 星期天为1), yday (年内天数)和isdst (是否为日光节约时间true/false)的带键名的表;

如果format不是 “t” ,os.date会将日期格式化为一个字符串,具体如下:

格式符含义具体示例
%a一星期中天数的简写os.date("%a") => Fri
%A一星期中天数的全称(Wednesday)
%b月份的简写(Sep)
%B月份的全称(May)
%c日期和时间(09/16/98 23:48:10)
%d一个月中的第几天(28)[0 - 31]
%H24小时制中的小时数(18)[00 - 23]
%I12小时制中的小时数(10)[01 - 12]
%j一年中的第几天(209) [01 - 366]
%M分钟数(48)[00 - 59]
%m月份数(09)[01 - 12]
%P上午或下午(pm)[am - pm]
%S一分钟之内秒数(10)[00 - 59]
%w一星期中的第几天(3)[0 - 6 = 星期天 - 星期六]
%W一年中的第几个星期(2)0 - 52
%x日期(09/16/98)
%X时间(23:48:10)
%y两位数的年份(16)[00 - 99]
%Y完整的年份(2016)
%%字符串'%'(%)
*t返回一个table,里面包含全部的数据hour 14

使用示例

我的lua版本:lua5.3

print ("os.date(\"*t\") 示例:\n")
local timetable = os.date("*t", os.time());
for i, v in pairs(timetable) do
    print(i, v);
end

print ("\n \"!\" 开头:\n")
local utimetable = os.date("!*t", os.time());
for i, v in pairs(utimetable) do
    print(i, v);
end

print ("\n其它用法:\n")
print(os.date("今天是 %c, 星期 %A"))

输出结果:

今天东八区中国广州的日期为:2018-11-1 21:13 星期四

os.date("*t") 示例:
wday    5
year    2018
day     1
sec     51
hour    21
isdst   false
month   11
yday    305
min     13
os.date("!*t") 示例:
wday    5
year    2018
day     1
sec     38
hour    13  --- 差8小时
isdst   false
month   11
yday    305
min     14
今天是 11/01/18 21:15:36, 星期 Thursday
  • 注意format "!" 的用法,因为我们的时间(北京)处于东8区,所以两次的结果会差8个小时(13+8=21),从结果中可以看出。
  • 注意使用format "*t"返回的table中wday如果是1表示星期天,而使用通用格式时%w用0表示星期天。

参考:https://www.jianshu.com/p/76ac11863591

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值