`
bluethink
  • 浏览: 97930 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • lua
阅读更多
曾几何时,在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

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

分享到:
评论

相关推荐

    lua 字节流操作

    总结来说,lua_lpack是Lua中用于字节流操作的重要工具,它通过打包和解包功能实现了数据的序列化和反序列化,使得在网络通信中高效、准确地处理字节流成为可能。无论是在游戏开发还是其他领域,熟悉并掌握lua_lpack...

    lua中使用毫秒精度时间的方法

    在Lua编程语言中,获取时间是一个基本的需求,但对于需要精确到毫秒级别的时间度量,标准的Lua时间函数的精度仅能达到秒。为了获取毫秒级别的精确时间,可以利用luasocket库,这是一个强大的网络库,其中包含了获取...

    lua 操作excel 表格

    在Lua中,可以使用内置的`string`和`table`库来实现数据结构的转换。例如,我们可以将读取到的表格数据存储为二维数组,然后利用`table.concat`生成XML字符串。 ```lua local function table_to_xml(data, indent) ...

    Lua实现两个日期相减得出天数(datadiff)

    实现两个数值型的日期相减得出天数的函数。

    对lua栈的简单操作

    当你在Lua中调用函数或创建变量时,这些操作都会涉及到栈的操作。 在C/C++中,我们通常使用Lua提供的C API来与Lua交互。这包括一系列的函数,如lua_push*()用于将值压入栈,lua_pop()用于弹出栈顶的值,lua_gettop...

    lua中文手册lua-5.3-zh-manual.pdf

    不同类型的值在Lua中有不同的表示方式和行为。 2. 环境和全局环境 环境可以理解为一组全局变量的表,每个运行的函数都有自己的环境。全局环境是指一个没有名称的预设全局变量表,是全局变量的实际载体。 3. 错误...

    LuaBitOp-1.0.2 lua位操作源码

    位操作是计算机科学中的基础概念,它们在底层编程、数据处理和优化中有着广泛的应用。LuaBitOp 的源码可以帮助开发者深入了解 Lua 对位操作的支持,以及如何在 Lua 脚本中实现这些功能。 首先,让我们来看看 Lua 位...

    C# lua库 支持中文函数名中文变量

    4. 访问和操作Lua变量:使用LuaState的`GetTable`和`SetTable`方法可以读写Lua中的变量,包括中文命名的变量。 ```csharp string myVar = lua.GetTable("我的变量").ToString(); lua.SetTable("新的变量值", "我的...

    Lua程序设计和lua-5.1中文手册

    你可以在这里查找关于字符串处理、数学运算、日期时间操作、文件I/O等的标准库函数,同时也会介绍环境变量、错误处理和调试技巧。手册还会深入到Lua的内存管理和垃圾回收机制,这对于理解性能优化至关重要。 在学习...

    Lua中文教程,高清PDF文档

    闭包是Lua中的一个重要概念,它允许函数访问并操作在其外部定义的变量,即使函数已经返回,这些变量仍然存在。 **模块和包系统** Lua的模块系统使得代码组织更加有序。通过require函数可以导入其他模块,实现代码...

    Lua中文教程&中文手册

    2. **表与面向对象编程**:Lua中的表不仅是动态数组,还能实现关联数组,支持元表和元方法,是实现面向对象编程的关键。 3. **函数与模块**:Lua中的函数是第一类公民,可以作为参数传递,也可以作为返回值。同时,...

    Lua中文编辑器luaEditor

    在luaEditor中,这些特性都是针对Lua语言优化的,有助于提高代码质量和开发速度。 从压缩包子文件的文件名称列表来看,只有一个"luaEditor",这可能是指整个编辑器的主程序或者安装包。通常,这样的文件包含了编辑...

    Lua中文教程+源码赏析

    6. **闭包**:理解闭包的概念及其在Lua中的应用,如创建私有变量。 7. **错误处理**:掌握error和pcall函数,以优雅的方式处理运行时错误。 8. ** Garbage Collection**:Lua自动进行垃圾回收,理解其工作原理对...

    lua程序设计及lua中文手册

    1. 变量与数据类型:Lua支持五种基本数据类型:nil(空值)、boolean(布尔型)、number(数字,包括整数和浮点数)、string(字符串)和table(表,是Lua中的通用数据结构,可以用来表示数组、集合、记录等)。...

    Lua中文教程pdf+LuaForWindows

    Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。5.0.2版的Lua的内核小于120KB。 分享一个Lua语言的中文pdf文档,有书签的,里面还有lua的运行环境,希望更多的人可以来学习Lua这一优美小巧的语言...

    lua中文教程(programming in lua)

    2. **表与元表**:lua中的表不仅用于数组操作,还能作为关联数组和对象。元表机制允许为表定义自定义的行为,实现面向对象编程。 3. **函数与闭包**:lua的函数是一等公民,可以作为参数传递、返回和存储。闭包的...

    Lua 5.1 中文参考手册.pdf (入门与提高)

    在Lua中,数据结构之一的table(表)非常灵活,可用于实现数组、记录、集合、队列等。Lua的table是动态数组,可以从任意索引开始使用,并且可以自动扩展容量。table可以通过字面量语法创建,并可使用点号或冒号操作...

    Lua中文教程 PDF

    在Lua中,表格是所有数据结构的基础,可以用来实现数组、字典、集合等。它们是基于哈希的关联数组,可以存储任意类型的键值对。 3. **控制结构** Lua提供了if...then...else、while、do...end、for循环等基本的...

    LuaAction C++访问LUA函数

    在这种场景下,LuaAction提供了一种高效的方法,允许C++代码直接访问和调用Lua中的函数,实现了两者的无缝集成。本文将详细阐述如何利用LuaAction来实现这一功能,以及它所支持的特性。 首先,LuaAction的核心特性...

    lua5.2全中文参考手册

    - **变量**:Lua中的变量是不需要声明类型的,可以直接进行赋值操作。 - **语句**:包括语句块、代码块、赋值、控制结构、循环语句等编程结构。 - **表达式**:详细介绍了算术、关系、逻辑、连接、长度等操作符和...

Global site tag (gtag.js) - Google Analytics