openresty开发系列20--lua的时间操作
openresty開發系列20--lua的時間操作
在 Lua 中,函數 time、date 和 difftime 提供了所有的日期和時間功能。
在 OpenResty 的世界里,不推薦使用這里的標準時間函數,
因為這些函數通常會引發不止一個昂貴的系統調用,同時無法為 LuaJIT JIT 編譯,對性能造成較大影響。
推薦使用 ngx_lua 模塊提供的帶緩存的時間接口,
如 ngx.today, ngx.time, ngx.utctime, ngx.localtime, ngx.now, ngx.http_time,以及 ngx.cookie_time 等。
一)os.time ([table])
它會返回當前的時間和日期的時間戳(精確到秒),如賦值table,表示此table指定日期的時間戳
字段名稱 ?? ??? ?取值范圍
year ?? ??? ??? ?四位數字
month ?? ??? ??? ?1--12
day ?? ??? ??? ?1--31
hour ?? ??? ??? ?0--23
min ?? ??? ??? ?0--59
sec ?? ??? ??? ?0--59
isdst ?? ??? ??? ?boolean(true表示夏令時)
對于 time 函數,如果參數為 table,那么 table 中必須含有 year、month、day 字段。
其他字缺省時段默認為中午(12:00:00)。
print(os.time())?? ?
a = { year = 2018, month = 1, day = 30, hour = 0, min = 0, sec = 0 }
print(os.time(a))? ?
時間戳的是以計算機最小時間和指定時間之間相差的秒數,計算機最小時間為1970-1-1 00:00:00(美國時區),
針對中國時區就是1970-1-1 08:00:00
a = { year = 1970, month = 1, day = 1, hour = 8, min = 0, sec = 1 }
print(os.time(a))
輸出的就是1秒
二)os.difftime (t2, t1)
返回 t1 到 t2 的時間差,單位為秒。
local day1 = { year = 2018, month = 1, day = 30 }
local t1 = os.time(day1)
local day2 = { year = 2018, month = 1, day = 31 }
local t2 = os.time(day2)
print(os.difftime(t2, t1))
--->output:86400
三)os.date ([format [, time]])
把一個表示日期和時間的數值,轉換成更高級的表現形式。
格式字符 ?? ??? ??? ?含義
%a ?? ??? ??? ??? ??? ?一星期中天數的簡寫(例如:Wed)
%A ?? ??? ??? ??? ??? ?一星期中天數的全稱(例如:Wednesday)
%b ?? ??? ??? ??? ??? ?月份的簡寫(例如:Sep)
%B ?? ??? ??? ??? ??? ?月份的全稱(例如:September)
%c ?? ??? ??? ??? ??? ?日期和時間(例如:07/30/15 16:57:24)
%d ?? ??? ??? ??? ??? ?一個月中的第幾天[01 ~ 31]
%H ?? ??? ??? ??? ??? ?24小時制中的小時數[00 ~ 23]
%I ?? ??? ??? ??? ??? ?12小時制中的小時數[01 ~ 12]
%j ?? ??? ??? ??? ??? ?一年中的第幾天[001 ~ 366]
%M ?? ??? ??? ??? ??? ?分鐘數[00 ~ 59]
%m ?? ??? ??? ??? ??? ?月份數[01 ~ 12]
%p ?? ??? ??? ??? ??? ?"上午(am)"或"下午(pm)"
%S ?? ??? ??? ??? ??? ?秒數[00 ~ 59]
%w ?? ??? ??? ??? ??? ?一星期中的第幾天[0 ~ 6 = 星期天 ~ 星期六]
%x ?? ??? ??? ??? ??? ?日期(例如:07/30/15)
%X ?? ??? ??? ??? ??? ?時間(例如:16:57:24)
%y ?? ??? ??? ??? ??? ?兩位數的年份[00 ~ 99]
%Y ?? ??? ??? ??? ??? ?完整的年份(例如:2015)
%% ?? ??? ??? ??? ??? ?字符'%'
print(os.date("today is %A, in %B"))
print(os.date("now is %x %X"))
print(os.date("%Y-%m-%d %H:%M:%S"))
-->output
today is Thursday, in July
now is 07/30/15 17:39:22
2018-03-29 22:36:05
---------------------------
t = os.date("*t", os.time());
for i, v in pairs(t) do
????? print(i, v);
end
yday??? 120? --一年中的第幾天,一月一日為1
month?? 4
sec???? 9
min???? 9
hour??? 16
day???? 30
year??? 2018
isdst?? false? --是否夏令時
wday??? 2?? --一周第幾天? 星期日為1
轉載于:https://www.cnblogs.com/reblue520/p/11433795.html
總結
以上是生活随笔為你收集整理的openresty开发系列20--lua的时间操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信小程序实时将less编译为wxss
- 下一篇: openresty开发系列21--lua