Lua - 将 XML 时间戳转换为 UTC 时间戳

我在 lua 中没有太多经验,并且无法完成一个简单的(我认为)任务:

给定一个包含时间戳的字符串(从 XML 文件解析),如何使用 lua 脚本将其转换为 UTC 格式的时间戳?

my_date = "2019-11-21T22:35:03.332+02:00"

基本上,我想编写一个函数/脚本,当传递这样的字符串时,我会得到一个空字符串(如果无法转换)或 UTC 格式的时间戳 (YYYY-MM-DD HH:MS:SS)

my_date 中,最后部分 ...+02:00 意味着(当地)时间比 UTC 提前 2 小时。

my_utc_date = "2019-11-21 20:35:03"

点赞
用户2858170
用户2858170

有几种方法可以实现你的目标。这里我向你展示如何使用string.matchstring patterns来获取字符串元素。其余部分是简单的数字计算。

-- 输入
local my_date = "2019-11-21T22:35:03.332+02:00"
-- 我们只需将T之前的任何东西保留为日期
local day = my_date:match("(.*)T")
-- 现在解析UTC偏移量
local offsetH, offsetM = my_date:match("([%+%-]%d%d):(%d%d)")

-- 应用符号到我们的分钟偏移量
offsetM = offsetM * (tonumber(offsetH) > 0 and 1 or -1)

-- 获取时间组件
local h, m, s, ms = my_date:match("(%d%d):(%d%d):(%d%d).(%d%d%d)")

-- 修复我们的和分钟以获取UTC
h = h - offsetH
m = m - offsetM
-- 四舍五入秒,因为我们的输入中有微秒
s = math.floor(s + ms / 1000 + .5)

-- 现在将所有内容放在一起并使用前导零
local my_utc_date = string.format("%s %02d:%02d:%02d", day, h, m, s)

print(my_utc_date)
2019-11-22 18:27:11