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

时间:2017-05-17 22:38:46

标签: datetime lua formatting

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

我拥有什么

我从DateTime值开始,格式为:

  • MM/DD/YYYY hh:mm:ss [AM/PM]

我需要什么

以某种方式使用Lua我需要将其转换为DateTime格式:

  • YYYY-MM-DD hh:mm:ss

我已经尝试过许多不同的事情,但我没有运气。我会发布我认为可能最合适的东西,但也许这种方式也很合适,而且这种方法更简单或更简单。

我尝试了什么

print(os.date("%Y-%m-%d %H:%M:%S","05/17/2017 05:17:00 PM"))

错误

  

stdin:1:错误的参数#2到' date'(预期的数字,得到字符串)

我假设

我认为这意味着数据类型是字符串而不是日期时间类型,并且需要在os.date可以使用之前对其进行转换。我还假设我可以将我所拥有的日期时间字符串的值传递给os.date,并且它将明智地输出相同的日期时间值,但是我需要以新格式输出。

我已经阅读了有关需要解析日期时间值部分的各种帖子,然后使用这些已解析的部分来构建您需要的格式。我希望有人可以帮助我指导我完成这项任务的正确方向,所以我不必经历更多的试验和错误运行并做更多的阅读但是我会这样做直到我收到回复或放弃这一天。

简单回顾

  • 我的值为:05/17/2017 05:17:00 PM

  • 我想将此值设为2017-05-17 17:17:00

使用新格式化的日期时间,我可以使用它来处理应用程序。

其他

将探讨解决此问题的任何级别的Lua逻辑,无论它是自定义函数,还是用于获取日期时间格式的不同内置函数等。我对所有想法持开放态度,只显示{{1我的例子中的{}和print()函数可以保持简单,但我可以使用更复杂的东西。

2 个答案:

答案 0 :(得分:3)

与其他语言不同,Lua没有DateTime类型;日期和时间通过字符串,数字和字符串和数字表在Lua中表示。这样做的结果是在Lua中有很多使用日期的方法,最好的方法取决于你的情况。

你从os.date得到的错误是因为第二个参数应该是Unix time中的数字(1970年1月1日以来的秒数)。为了在您的情况下工作,您需要使用os.time函数将时间戳转换为Unix时间。但是,os.time需要一个数字表作为输入,因此您可以自行解析实际日期并查找日期字符串中的数字。

但是,在您的情况下,您的输入是一个字符串,并且您所需的输出是一个类似的字符串,因此您只需执行日期解析而不是使用os.date和{{1转换结果}}。这就是@tonypdmtr在答案中对os.time所做的事情。以下是使用string.gsubstring.match

执行非常相似的操作的方法
string.format

答案 1 :(得分:2)

您可以随时使用:gsub进行您想要的任何转换。

a ='05/17/2017 05:17:00 PM'

b = a:gsub('(%d%d)/(%d%d)/(%d%d%d%d) (%d%d)(:%d%d:%d%d) ([AP]M)',
      function(a,b,c,d,e,am_pm)
        return c .. '-' .. a .. '-' .. b .. ' ' ..
               (am_pm == 'AM' and d or ('%2d'):format(d+12)) .. e
      end)

print(a)
print(b)