如何在Lua中将ISO 8601持续时间转换为格式化字符串?

我最近一直在使用Youtube API v3,但当我需要将ISO 8601持续时间转换为格式化字符串时,网上没有任何帮助。我在各个地方搜索,寻找可以帮助处理这种问题的特定库,但不幸的是,Lua没有这样的库。其他语言中有成千上万个库,除了Lua。

现在,似乎我只能使用字符串模式,而我甚至不知道该如何使用它们。那么我还能用什么方法来完成这个任务呢?

ISO 8601持续时间的示例: PT3M33S

我想将它转换为这样的内容: 3:33

点赞
用户107090
用户107090

如果你不想解析整个 ISO 8601 规范,可以尝试使用以下代码:

s="PT3M33S"
t=s:gsub("^.-(%d+)M(%d+)S","%1:%2")
print(t)

它使用了 Lua 的 pattern 匹配。该 pattern 语句解析为:跳过任意字符直到一个数字后面跟着一个 M 且接下来是一串数字和一个 S。捕获两个数字并用它们来替换原来的 pattern。

如果你想提取这两个数字,可以使用以下代码:

s="PT3M33S"
M,S=s:match("^.-(%d+)M(%d+)S")
print(M,S)
2017-02-03 19:39:32