将DateTime格式转换为Lua中的另一个DateTime格式

我有一个问题,其中使用日期值发送到应用程序进行某些处理,需要首先将其格式化为不同的DateTime格式.

是)我有的

我从以下格式的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',month,seconds
)
print(newDate) -- 2017-05-17 17:17:00

相关文章

1.github代码实践源代码是lua脚本语言,下载th之后运行thmai...
此文为搬运帖,原帖地址https://www.cnblogs.com/zwywilliam/...
Rime输入法通过定义lua文件,可以实现获取当前时间日期的功能...
localfunctiongenerate_action(params)localscale_action=cc...
2022年1月11日13:57:45 官方:https://opm.openresty.org/官...
在Lua中的table(表),就像c#中的HashMap(哈希表),key和...