曾幾何時,在lua裡面對時間進行操作總是充滿了辛酸和不堪,最終下定決心使用乙個優雅的方式實現對日期的處理,在大多數情況下對日期時間的處理主要是:
根據已知時間和偏移量以及時間單位計算出乙個新的時間
設計思路:
1.借助於lua提供的os.date和os.time實現
2.用os.date把給定的時間從字串轉成對應的日期時間
3.用os.time把第2步裡面的時間按時間單位和偏移量進行加或減操作
實現目標:
根據指定的時間、時間間隔、時間單位來計算出新的時間
減10分鐘,新時間=2013-09-08 23:18:28
減8天, 新時間=2013-08-31 23:18:28
加2小時, 新時間=2013-09-09 02:28:28
上**:
引數說明:
srcdatetime 原始時間字串,要求格式%y%m%d%h%m%s,這個時間格式字串表示4位年份、月份、day、小時、分鐘、秒都是2位數字
interval 對該時間進行加或減具體值,>0表示加 <0表示減
dateunit 時間單位,支援day、hour、second、minute 4種時間單位操作,根據interval具體值對原始時間按指定的單位進行加或減
例如,interval=10,unit='day',表示對原始時間加10天
interval=-1,unit='hour',表示對原始時間減1小時
返回結果是乙個os.date,他是乙個table結構,裡面包含了year,month,day,hour,minute,second 6個屬性,跟據需要從結果裡面取出需要的屬性然後根據需要產生相應的新的日期格式即可。
function getnewdate(srcdatetime,interval ,dateunit)
--從日期字串中截取出年月日時分秒
local y = string.sub(srcdatetime,1,4)
local m = string.sub(srcdatetime,5,6)
local d = string.sub(srcdatetime,7,8)
local h = string.sub(srcdatetime,9,10)
local mm = string.sub(srcdatetime,11,12)
local ss = string.sub(srcdatetime,13,14)
--把日期時間字串轉換成對應的日期時間
local dt1 = os.time
--根據時間單位和偏移量得到具體的偏移資料
local ofset=0
if dateunit=='day' then
ofset = 60 *60 * 24 * interval
elseif dateunit == 'hour' then
ofset = 60 *60 * interval
elseif dateunit == 'minute' then
ofset = 60 * interval
elseif dateunit == 'second' then
ofset = interval
end--指定的時間+時間偏移量
local newtime = os.date("*t", dt1 + tonumber(ofset))
return newtime
endfunction test()
local oldtime="20130908232828"
--把指定的時間加3小時
local newtime=getnewdate(oldtime,3,'hour')
local a1 = string.format('%d-%02d-%02d %02d:%02d:%02d',newtime.year,newtime.month,newtime.day,newtime.hour,newtime.min,newtime.sec)
print('t1='..t1)
--把指定的時間加1天
local newtime=getnewdate(oldtime,1,'day')
local t2 = string.format('%d%02d%02d%02d%02d%02d',newtime.year,newtime.month,newtime.day,newtime.hour,newtime.min,newtime.sec)
print('t2='..t2)
endtest()
輸出結果:
t1=2013-09-09 02:28:28
t2=20130909232828
哈哈,是不是有點爽爽的感覺,時間的偏移量和單位隨需求調整,而且確保計算出的新時間是完全正確的。這裡演示了兩種格式化處理,把新的時間輸出成指定的格式,在實際應用當中可以根據自己的需要把結果格式化成需要的格式。
lua 差值 日期 Lua日期與時間操作
os.time 返回當前系統的日曆時間 os.date 返回本地化的時間字串,這裡是 11 28 08 17 23 37 os.date x os.time 返回自定義格式化時間字串 完整的格式化引數 這裡是 11 28 08 os.clock 返回執行該程式cpu花去的時鐘秒數,這裡是1156.7...
lua 差值 日期 lua時間戳和日期轉換及踩坑
介紹lua的日期函式常用方法及我的乙個踩坑。時間戳轉日期 os.date y m d h unixtime os.date y m d h 1534435200 2018081700 日期轉時間戳 指定日期的時間戳 os.time 1534435200 當前時間戳 os.time 格式佔位符 時間格...
在Lua中「優雅」地使用Protobuf
protoc gen lua 這個庫的用法和c 版本的比較接近,通過工具生成每個message的 在lua裡面new乙個message出來進行賦值,最後通過msg serializetostring 將其序列化成二進位制。這種使用方式在lua裡面很不方便,沒有了指令碼語言的優勢。pbc lua pr...