在Lua中将日期转换为Unix时间,而不使用os.time()。

我正在开发一个用Lua编写的插件。

我需要一种计算Unix时间的方法,或者至少一种比较两个日期字符串的方法。

我可以使用的函数只返回以下格式的日期字符串

“1/17/2014 6:50 PM”

有没有一种将此字符串转换为Unix时间的方法?

不幸的是,我无法访问OS库,因此诸如“os.time()”之类的东西无法使用。

是否有类似的库或类似的东西可以使用?

+是的,我考虑过将字符串分成部分,但我还需要一种添加/减去时间的方法。

点赞
用户1009479
用户1009479

如果你只需要比较两个时间,你不需要获取每个时间的 Unix 时间戳。一种可能的解决方案是从字符串中获取时间字段,如下所示:

local time = "1/17/2014 6:50 PM"
local month, day, year, hour, minute, am_pm = time:match("(%d+)/(%d+)/(%d+)%s+(%d+):(%d+)%s+(%w+)")

print(month, day, year, hour, minute, am_pm)

输出:1 17 2014 6 50 PM

然后通过比较它们的“年”来比较两个时间,如果它们相等,那么比较“月”,以此类推。记得使用tonumber将它们按数字进行比较,而不是字符串本身。

2014-01-17 08:14:13
用户107090
用户107090

只需要比较标准化的时间戳:

function normalize(a)
    local m,d,y,h,mi,n=a:match("(%d+)/(%d+)/(%d+)%s+(%d+):(%d+)%s+(%w+)")
    if n=="PM" then h=h+12 end
    return string.format("%04d%02d%02d%02d%02d",y,m,d,h,mi)
end

日期算术是另一个故事。对于完整的、纯 Lua 日期库,请参见 luatzhttps://github.com/Tieske/date

2014-01-17 13:01:00