lua os.date函數定義和示例

os.date函數定義

  • 原型:os.date ([format [, time]])
  • 解釋:返回一個按format格式化日期、時間的字串或表。

lua源碼中os.date的註釋以下:git

---
--- 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]])函數

由原型能夠看出能夠省略第二個參數也能夠省略兩個參數,ui

只省略第二個參數函數會使用當前時間做爲第二個參數,this

若是兩個參數都省略則按當前系統的設置返回格式化的字符串,作如下等價替換 os.date() <=> os.date("%c")。lua

若是format以 「!」 開頭,則按格林尼治時間進行格式化。code

若是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)的帶鍵名的表;orm

若是format不是 「t」 ,os.date會將日期格式化爲一個字符串,具體以下:ip

格式符 含義 具體示例
%a 一星期中天數的簡寫 os.date("%a") => Fri
%A 一星期中天數的全稱 (Wednesday)
%b 月份的簡寫 (Sep)
%B 月份的全稱 (May)
%c 日期和時間 (09/16/98 23:48:10)
%d 一個月中的第幾天 (28)[0 - 31]
%H 24小時制中的小時數 (18)[00 - 23]
%I 12小時制中的小時數 (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.3ci

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

相關文章
相關標籤/搜索