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

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

转载于:https://www.cnblogs.com/wangzhitie/p/5209985.html

在lua中优雅的操作日期和时间相关推荐

  1. 在Linux命令行提示符PS1中优雅地显示日期和时间

    用"\d"的时候显示的时间是依据系统语言而变化的,文字描述的时间,"二","Tue","火"等 [root@CentOS ...

  2. Laravel中优雅的验证日期需要大于今天

    我们有时会碰到一个场景,比如买车票,需要进行查询车票剩余,这时候需要一个日期范围,开始日期必须大于等于今天,结束日期必须大于等于开始日期. Version Laravel 5.5.40 PHP 7.1 ...

  3. SQL获得当前的日期和时间与DB2 中操作日期和时间

    星期六 2007年08月18日 要使用 SQL 获得当前的日期.时间及时间戳记,请参考适当的 DB2 寄存器: SELECT current date FROM sysibm.sysdummy1 SE ...

  4. python gmtime_在Python中操作日期和时间之gmtime()方法的使用

    在Python中操作日期和时间之gmtime()方法的使用 这篇文章主要介绍了在Python中操作日期和时间之gmtime()方法的使用,是Python入门学习中的基础知识,需要的朋友可以参考下 gm ...

  5. python操作日期和时间的方法

    2019独角兽企业重金招聘Python工程师标准>>> 经常获得了一个用户提交的当前日期,我们需要以这个日期为依据返回它的前一天.后一天的日期或者转换操作等.用Python可以非常简 ...

  6. 计算机获取的系统时间是什么时间格式,【excle怎样获取当前日期格式】如何在EXCEL中显示当天的日期和时间?...

    Excel中,如何用函数获取当前日期(即系统日期)的月份值? 个=month(today()). 当月=month(today()),当日=day(today()). =TODAY()获得当前日期,形 ...

  7. python中gmtime的hour错误_python中gmtime的hour错误_在Python中操作日期和时间之gmtime()方法的使用...

    python中datetime怎么用广告总是在最精彩的时候出现,你总是在小编爱的最深的时候离开. ''''' 日期相关的操作 ''' from datetime import datetime fro ...

  8. Java语言中提供了三个日期类_Java语言学习(5)-Java中基础封装类(日期、时间类)...

    日期和时间封装类 1. Data类 Java日期和时间采用Data类.Data类在java.util包中. Data类构造函数: 1)       Data()   采用当前时间初始化对象: 2)   ...

  9. 获取当前周一日期_Excel工作表中最全的日期、时间函数,效率办公必备!

    点击上方"Excel函数公式"免费订阅 在Excel工作表中,函数也可以分为好几类,今天,小编带大家学习时间和日期函数. 一.Excel工作表日期函数:Date. 功能:返回特定日 ...

  10. 在windows中,更改计算机的日期和时间的方法有,windows10系统修改时间和日期方法介绍...

    在使用电脑的时候,有的时候因为工作需要或者是当前系统时间不准等情况下要自行设置下电脑系统下的时间,但是还有用户不是很了解在windows10系统中怎么去修改电脑时间和日期.今天小编就给大家介绍下载wi ...

最新文章

  1. 字典树andXOR*
  2. 前端一HTML:四: html标签
  3. 程序员的自我修养学习笔记——第五章
  4. python插件开发怎么扩展主程序_python扩展实现方法--python与c混和编程
  5. es6 之 generator(-)
  6. 第二次冲刺阶段 站立会议09
  7. 笔记-Microsoft SQL Server 2008技术内幕:T-SQL语言基础-02 单表查询
  8. 语言学句法分析树形图怎么画_哇,好大一棵树! 如何优雅地画句法树形图 丨语言学午餐...
  9. 强烈推荐大家看这篇文章:iOS开发常用三方库、插件、知名博客等等(特别有用)
  10. 驱动开发:BSOD 0xC4_f6 句柄问题
  11. 计算机删除用户8,Win8.1如何删除账户?
  12. 刚刚,微信官宣 1000W+ 跨年红包开发,速度搞!
  13. 电路板参数有哪些参数
  14. 华为手机 运行 linux,Linux 用户玩转华为手机之华为分享
  15. Java RESTful Web Service实战(第2版)
  16. word中最后一行留白太多
  17. intouch实时报警
  18. 【我的第一个目标检测课题】3、Retinanet网络的学习与实现+扩展
  19. 【Docker】docker镜像的获取、制作方法、Dockerfile
  20. Power Query M语言表函数Table分类汇总,快速掌握

热门文章

  1. 新年2021HTML,2021年了,来一段新年快乐的挂件源码
  2. linux mc服务器 mod_使用阿里云服务器搭建饥荒联机版服务器(最新有效2020.2.9更新)...
  3. 关闭ant的tree_ant-design Tree组件问题
  4. Java8 - Stream API快速入门
  5. docker 实践(十二)k8s 初体验
  6. 学习笔记-小甲鱼Python3学习第二十三、二十四讲:函数:这帮小兔崽子、汉诺塔...
  7. 【Java集合的详细研究4】Java中如何遍历Map对象的4种方法
  8. 火狐与IE兼容性总结(一)
  9. C#区分中英文统计字符串的长度
  10. pytorh——Fully-connected