lua 的 os.date 跟 shell的 date 功能一樣強大。
關於的時間的概念梳理:
1. 格林威治時間GMT時間是我們平時使用的時間,世界各地的時間不一樣是因為時區不一樣,國內基本統一使用的北京時間,
時區是東八區。http://www.24timemap.com/ 所以世界在同一時刻的時間是不一致的。
2. UTC時間 是 世界標准時間/原子時間,在時間上盡量接近於世界時的一種時間計量系統,這套時間基本用於互聯網時間標准中。
3. UTC時間跟 GMT 時間是一樣的,都與英國倫敦的本地時間相同,含義也相同。
4. 時區里的東區是比西區快,北京早上8點,意味着倫敦時間是凌晨0點,而美國那邊的時間是昨天晚上時間【這個昨天是相對於我們來說的】。
一、時間的3種格式
先來看看日常 時間表示的 3種格式:
1、 時間戳形式表示:time=1587115724,這個是以秒為單位的 格林威治時間GMT,不同地區的格林威治時間不一樣有時差,但是時間戳一致。
2、用字符串表示:time="2020-11-11 22:12:32"
3. table形式表示:{"sec":13,"min":50,"day":18,"isdst":false,"wday":7,"yday":109,"year":2020,"month":4,"hour":15}
二、os.date 函數
lua 的os.date 函數獲取:
原型:os.date ( [format [, time]] )
解釋:返回 format格式的 關於時間的 字符串或者table。
1. 兩個參數都是可以省略的。省略兩個參數:按當前系統的設置返回格式化的字符串 ;
2. 只省略第二個參數函數會使用當前時間作為第二個參數 ;第二個參數是數字或者字符串格式的數字;
3. 如果format以“!”開頭,則按格林尼治時間進行格式化;
4. 如果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)的帶鍵名的表;
5. 如果format不是“*t”,os.date會將日期格式化為一個字符串,具體如下:

cjson=require "cjson" print("省略兩個參數:",os.date()) print("省略第二個參數,會拿當前時間作為第二個參數:",os.date("%c")) print("\n第一個參數是format格式化參數") print("format 帶 ! :",cjson.encode(os.date("!*t"))) print("format不帶 ! :",cjson.encode(os.date("*t"))) print("\n第二個參數是時間戳") time=os.time() print("獲取一個當前的時間戳: ",time) print("format 帶 ! :",cjson.encode(os.date("!*t",time))) print("format不帶 ! :",cjson.encode(os.date("*t",time))) print("一星期中的第幾天:",cjson.encode(os.date("%w",time))) print("星期幾 :",cjson.encode(os.date("%a",time))) print("星期幾 :",cjson.encode(os.date("%A",time)))
運行結果:
細節:注意format "!" 的用法,因為我們的時間(北京)處於東8區,所以兩次的結果會差8個小時,從結果中可以看出。
注意使用format "*t"返回的table中wday如果是1表示星期天,而使用通用格式時%w用0表示星期天。
三、os.time 函數
原型:os.time ( [table] )
解釋:如果沒有任何參數,會返回當前時間【時間戳形式】,如果參數是table,並且table的域必須有 year, month, day,
可有也可以沒有 hour, min, sec, isdst,則會返回table所代表日期的時間,如果未定義后幾項,默認時間為當天正午(12:00:00)。
示例:
print("不帶參數:",os.time()) print("table參數不全:",os.time({day=26,month=4,year=2020})) print("\n跟 os.date() 結合 使用") print(os.date("%B %A %y-%m-%d, %H:%M:%S",os.time({day=26,month=4,year=2020})))
結果: