曾几何时,在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. 7个建议帮你完成更多的工作
  2. send和WSASend区别
  3. python的xpath用法_python之Xpath语法
  4. Java受查异常和运行时异常的理解
  5. 计算机语言表示教师节快乐,表达教师节快乐的微信祝福语大汇总54句
  6. @Cacheable原理
  7. MySQL基本指令汇总
  8. java tls 实例_grpc加密TLS初体验(go、java版本)
  9. 组织需要什么样的我_为什么开放组织对我说话
  10. 药店零售管理php系统,医药POS零售管理系统
  11. bugku之江湖魔头
  12. 数据仓库(8)数仓事实表和维度表技术
  13. 新能源汽车行业资讯-2022-9-19
  14. 英文名字的昵称(亲切的叫法)
  15. 关于oracle的锁的级别以及介绍
  16. Linux Qt cannot find -lGL错误完美解决方案
  17. 【大数据AI人工智能】意识是什么? AI 怎样才算是拥有了意识?
  18. 使用VS2013编写螺栓计算程序
  19. 2020 java设计模式之适配器模式
  20. .net调用百度api统计接口

热门文章

  1. HDFS中JAVA API的使用
  2. 绝版经典《Linux与UNIX Shell编程指南》中文文字PDF版
  3. 浅谈客服中心员工情绪管理这件事
  4. salt-API基本验证命令
  5. 云计算项目实战——系统API模块
  6. 为什么B+树适合做索引
  7. Mysql优化(出自官方文档) - 第十篇(优化InnoDB表篇)
  8. Laravel+DingoAPI+Passport使用邮箱或手机号或uid登录
  9. 在Flask程序中实现GitHub登录和GitHub资源交互
  10. EF中CodeFirst中实体变化的处理方式