曾几何时,在lua里面对时间进行操作总是充满了辛酸和不堪,最终下定决心使用一个优雅的方式实现对日期的处理,在大多数情况下对日期时间的处理主要是:
根据已知时间和偏移量以及时间单位计算出一个新的时间
设计思路:
1.借助于lua提供的os.date和os.time实现
2.用os.date把给定的时间从字符串转成对应的日期时间
3.用os.time把第2步里面的时间按时间单位和偏移量进行加或减操作
实现目标:
根据指定的时间、时间间隔、时间单位来计算出新的时间
例如当前时间:2013-09-08 23:28:28。
减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{year=Y, month=M, day=D, hour=H,min=MM,sec=SS}
--根据时间单位和偏移量得到具体的偏移数据
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
end
测试下效果:
function 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)
end
test()
输出结果:
t1=2013-09-09 02:28:28
t2=20130909232828
哈哈,是不是有点爽爽的感觉,时间的偏移量和单位随需求调整,而且确保计算出的新时间是完全正确的。这里演示了两种格式化处理,把新的时间输出成指定的格式,在实际应用当中可以根据自己的需要把结果格式化成需要的格式。