是)我有的
我从以下格式的DateTime值开始:
> MM / DD / YYYY hh:mm:ss [AM / PM]
我需要的
以某种方式使用Lua我需要将其转换为DateTime格式:
> YYYY-MM-DD hh:mm:ss
我尝试了许多不同的东西,我没有运气;我会发布我尝试过的东西,我觉得这可能是最合适的但也许这也是关闭的,并且有一种更简单或更简单的LUA方法.
我尝试了什么
print(os.date("%Y-%m-%d %H:%M:%S","05/17/2017 05:17:00 PM"))
错误
stdin:1: bad argument #2 to ‘date'(number expected, got string)
我假设的是什么
我认为这意味着数据类型是一个字符串而不是日期时间类型,它需要在os.date可以使用它之前进行转换.我也假设我可以将日期时间字符串的值传递给os.date,并且它将明智地输出相同的日期时间值,但是我需要使用新格式.
我已经阅读了有关需要解析日期时间值部分的各种帖子,然后使用这些已解析的部分来构建您需要的格式.我希望有人可以通过这项任务帮助我指导正确的方向,所以我不需要通过更多的试验和错误运行并做更多的阅读,但我会这样做,直到我听到回来或放弃一天.
简单回顾
>我的价值开始于:05/17/2017 05:17:00 PM
>我想将此值发送到2017-05-17 17:17:00
使用新格式化的日期时间,我可以使用它来处理应用程序.
其他
任何级别的Lua逻辑解决这个问题都将被探索,无论它是一个自定义函数,不同的内置函数来获取日期时间格式等等.我对所有想法持开放态度,只显示了print()和os.date(在我的例子中的函数,以保持简单,但我对更复杂的东西开放.
与其他语言不同,Lua没有DateTime类型;日期和时间通过字符串,数字和字符串和数字表在Lua中表示.这样做的结果是在Lua中有许多使用日期的方法,最好的方法取决于你的情况.你从os.date得到的错误是因为第二个参数应该是Unix time中的一个数字(自1970年1月1日以来的秒数).为了在您的情况下工作,您需要使用os.time函数将时间戳转换为Unix时间.但是,os.time需要一个数字表作为输入,因此您需要进行实际的日期解析并从日期字符串中查找数字.
但是,在你的情况下,你的输入是一个字符串,你想要的输出是一个类似的字符串,所以你只需要进行日期解析,而不是使用os.date和os.time转换结果.这就是@tonypdmtr在他的回答中对string.gsub所做的.以下是使用string.match和string.format做一些非常相似的事情:
local date = '05/17/2017 05:17:00 PM' local month, day, year, hours, minutes, seconds, amPm = date:match('^(%d%d)/(%d%d)/(%d%d%d%d) (%d%d):(%d%d):(%d%d) ([AP]M)$') if not month then -- Our entire match failed, and no captures were made error('could not parse date "' .. date .. '"') end if amPm == 'PM' then hours = string.format('%2d', tonumber(hours) + 12) end local newDate = string.format( '%s-%s-%s %s:%s:%s', year, month, day, hours, minutes, seconds ) print(newDate) -- 2017-05-17 17:17:00