如何将分钟和秒添加到 lua 中的日期时间?
How can I add minutes and seconds to a datetime in lua?
我有一个 lua 函数来尝试转换当前播放歌曲的持续时间,例如hh:mm:ss 秒。
function toSeconds (inputstr)
local mytable = string.gmatch(inputstr, "([^"..":".."]+)");
local conversion = { 60, 60, 24}
local seconds = 0;
--iterate backwards
local count = 0;
for i=1, v in mytable do
count = i+1
end
for i=1, v in mytable do
mytable[count-i]
seconds = seconds + v*conversion[i]
end
return seconds
end
为了将其添加到os.time
以获得歌曲的预计结束时间。
但是小时数可能会丢失,或者分钟可能会丢失。
当运行对抗https://www.lua.org/cgi-bin/demo时,我得到的只是input:10: 'do' expected near 'in'
用于测试脚本
function toSeconds (inputstr)
local mytable = string.gmatch(inputstr, "([^"..":".."]+)");
local conversion = { 60, 60, 24}
local seconds = 0;
--iterate backwards
local count = 0;
for i=1, v in mytable do
count = i+1
end
for i=1, v in mytable do
mytable[count-i]
seconds = seconds + v*conversion[i]
end
return seconds
end
print(toSeconds("1:1:1")
您混淆了编写 for
循环的两种可能方式:
a)
for i=1,10 do
print(i, "This loop is for counting up (or down) a number")
end
b)
for key, value in ipairs({"hello", "world"}) do
print(key, value, "This loop is for using an iterator function")
end
如您所见,第一个简单地计算一个数字,在本例中为 i
。第二个非常通用,可用于迭代几乎所有内容(例如使用 io.lines
),但最常与 pairs
和 ipairs
一起使用以迭代 tables.
你也不写for ... in tab
,其中tab
是一个table;你必须为此使用 ipairs
,然后 return 是 table 的迭代器(这是一个函数)
您还错误地使用了 string.gmatch
;它不是 return 一个 table,而是一个迭代器函数,用于匹配字符串中的模式,因此您可以像这样使用它:
local matches = {}
for word in some_string:gmatch("[^ ]") do
table.insert(matches, word)
end
这会为您提供包含匹配项的实际 table,但如果您只想迭代 table,您还不如直接使用 gmatch
循环。
for i=1, v in mytable do
count = i+1
end
我想你只是想在这里计算 table 中的元素?您可以使用 #
运算符轻松获得 table 的长度,因此 #mytable
如果你有一个像 hh:mm:ss
这样的字符串,但是小时和分钟可能会丢失,最简单的方法可能是只用 0 填充它们。实现这个的一个有点 hacky 但简短的方法是只需将 "00:00:"
附加到您的字符串,然后查找其中的最后 3 个数字:
local hours, minutes, seconds = ("00:00:"..inputstr):match("(%d%d):(%d%d):(%d%d)$")
如果没有遗漏任何内容,您最终会得到类似 00:00:hh:mm:ss
的结果,您只需取其最后 3 个值即可得到正确的时间。
我有一个 lua 函数来尝试转换当前播放歌曲的持续时间,例如hh:mm:ss 秒。
function toSeconds (inputstr)
local mytable = string.gmatch(inputstr, "([^"..":".."]+)");
local conversion = { 60, 60, 24}
local seconds = 0;
--iterate backwards
local count = 0;
for i=1, v in mytable do
count = i+1
end
for i=1, v in mytable do
mytable[count-i]
seconds = seconds + v*conversion[i]
end
return seconds
end
为了将其添加到os.time
以获得歌曲的预计结束时间。
但是小时数可能会丢失,或者分钟可能会丢失。
当运行对抗https://www.lua.org/cgi-bin/demo时,我得到的只是input:10: 'do' expected near 'in'
用于测试脚本
function toSeconds (inputstr)
local mytable = string.gmatch(inputstr, "([^"..":".."]+)");
local conversion = { 60, 60, 24}
local seconds = 0;
--iterate backwards
local count = 0;
for i=1, v in mytable do
count = i+1
end
for i=1, v in mytable do
mytable[count-i]
seconds = seconds + v*conversion[i]
end
return seconds
end
print(toSeconds("1:1:1")
您混淆了编写 for
循环的两种可能方式:
a)
for i=1,10 do
print(i, "This loop is for counting up (or down) a number")
end
b)
for key, value in ipairs({"hello", "world"}) do
print(key, value, "This loop is for using an iterator function")
end
如您所见,第一个简单地计算一个数字,在本例中为 i
。第二个非常通用,可用于迭代几乎所有内容(例如使用 io.lines
),但最常与 pairs
和 ipairs
一起使用以迭代 tables.
你也不写for ... in tab
,其中tab
是一个table;你必须为此使用 ipairs
,然后 return 是 table 的迭代器(这是一个函数)
您还错误地使用了 string.gmatch
;它不是 return 一个 table,而是一个迭代器函数,用于匹配字符串中的模式,因此您可以像这样使用它:
local matches = {}
for word in some_string:gmatch("[^ ]") do
table.insert(matches, word)
end
这会为您提供包含匹配项的实际 table,但如果您只想迭代 table,您还不如直接使用 gmatch
循环。
for i=1, v in mytable do
count = i+1
end
我想你只是想在这里计算 table 中的元素?您可以使用 #
运算符轻松获得 table 的长度,因此 #mytable
如果你有一个像 hh:mm:ss
这样的字符串,但是小时和分钟可能会丢失,最简单的方法可能是只用 0 填充它们。实现这个的一个有点 hacky 但简短的方法是只需将 "00:00:"
附加到您的字符串,然后查找其中的最后 3 个数字:
local hours, minutes, seconds = ("00:00:"..inputstr):match("(%d%d):(%d%d):(%d%d)$")
如果没有遗漏任何内容,您最终会得到类似 00:00:hh:mm:ss
的结果,您只需取其最后 3 个值即可得到正确的时间。