Lua日期操作循环。
2015-6-29 15:50:30
收藏:0
阅读:75
评论:2
我想运行一个批处理脚本,其中包含两个日期值,我想要调整这些值,然后再次运行脚本。我想要引用一个 lua 脚本,让它为我调整这些日期值。我使用 lua 是因为项目的大部分代码都是用这种语言编写的。
如果我的变量是 start=01/01/2012 和 end=02/01/2012,我该如何将这两个日期都往前推进 14 天?然后我想让它运行,然后循环再次运行,并将两个日期再向前推进另外 14 天。这将继续进行,直到循环跳出,以我决定的日期为止。我能否用这种方式完成这项任务,还是我在处理上出了错?
我想我可以使用 string.gsub 来进行某些操作,并使用一个函数从我的日期中提取 "dd" 并将其向前调整 14 天。不过,这种日期算术计算是否可行,或者一旦到达月末,就会出现问题,它会尝试读取像 01/45/2012 这样的日期?
点赞
用户2633423
您的规范不太清楚。我猜以下脚本可能会有所帮助。
技巧是将您的日期转换为由os.time返回的时间值,这些值可以像简单数字一样比较。
为此,您首先必须解析date的字符串形式,然后将其转换为适合输入os.time的表格形式。请注意,增加这些表格的字段(表示具有其组件分裂的日期)已处理时间算术,即将具有例如32的值的day'字段传递给os.time时,将正确包装为下一个月。
当您到达目标日期时,使用os.date将时间值转换回所需的日期格式。
local TARGET_DATE = "03/05/2012"
-- get the two dates from the command line of this lua script
local date1 = arg[1]
local date2 = arg[2]
date1 = "01/01/2012" -- test data - remove in actual script
date2 = "02/01/2012" -- test data - remove in actual script
-- parse the dates (assuming the format day/month/year)
local d1, m1, y1 = string.match( date1, '^(%d%d)/(%d%d)/(%d%d%d%d)$' )
local d2, m2, y2 = string.match( date2, '^(%d%d)/(%d%d)/(%d%d%d%d)$' )
local td, tm, ty = string.match( TARGET_DATE, '^(%d%d)/(%d%d)/(%d%d%d%d)$' )
print( d1, m1, y1 ) -- debug
print( d2, m2, y2 ) -- debug
print( td, tm, ty ) -- debug
date1_tbl = { day = d1, month = m1, year = y1 }
date2_tbl = { day = d2, month = m2, year = y2 }
local time1 = os.time( date1_tbl )
local time2 = os.time( date2_tbl )
local target_time = os.time { day = td, month = tm, year = ty }
-- loop until both dates exceed target date
while time1 < target_time or time2 < target_time do
date1_tbl.day = date1_tbl.day + 14
date2_tbl.day = date2_tbl.day + 14
time1 = os.time( date1_tbl )
time2 = os.time( date2_tbl )
end
-- rebuild new dates
local newdate1 = os.date( "%d/%m/%Y", time1 )
local newdate2 = os.date( "%d/%m/%Y", time2 )
print( newdate1 ) -- debug
print( newdate2 ) -- debug
2013-11-04 20:26:59
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
你可能需要使用string.match进行解析,并使用os.time和os.date来构建正确的新时间字符串(os.time用于将新添加的日期转换为正确的月份/年份,os.date用于将os.time返回的时间转换为易于理解的字符串/表格),以执行日期检查循环/停止。