Bit*_*iac 5 formatting 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"))
Run Code Online (Sandbox Code Playgroud)
标准输入:1:“日期”的错误参数 #2(预期数字,得到字符串)
我认为这意味着数据类型是字符串而不是日期时间类型,它需要先转换它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 中处理日期的方法有很多种,最适合使用的方法取决于您的情况。
您得到的错误是因为第二个参数应该是Unix 时间os.date中的数字(自 1970 年 1 月 1 日以来的秒数)。为了使其适用于您的情况,您需要使用该函数将时间戳转换为 Unix 时间。但是,需要一个数字表作为输入,因此您需要进行实际的日期解析并从日期字符串中查找数字。os.timeos.time
但是,在您的情况下,您的输入是一个字符串,并且您所需的输出是一个类似的字符串,因此您可以只进行日期解析而不用 and 转换os.date结果os.time。这就是 @tonypdmtrstring.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
Run Code Online (Sandbox Code Playgroud)