lua 差值 日期_在lua中优雅的操作日期和时间

本文介绍了如何在Lua中使用os.date和os.time函数优雅地处理日期时间,包括根据时间、间隔和单位计算新时间。通过示例展示了如何加减天数、小时、分钟和秒,并提供了相关函数的实现。
摘要由CSDN通过智能技术生成

曾几何时,在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

哈哈,是不是有点爽爽的感觉,时间的偏移量和单位随需求调整,而且确保计算出的新时间是完全正确的。这里演示了两种格式化处理,把新的时间输出成指定的格式,在实际应用当中可以根据自己的需要把结果格式化成需要的格式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值