所以基本上我對如何制作它感到困惑,以便我可以將 DD:HH:MM:SS 轉換為只有幾秒鐘,同時考慮到數字的數量。(對不起,如果我理解為 0,你肯定知道我在下面的例子中的意思。)
print("05:00":FormatToSeconds()) -- 5 minutes and 0 seconds
-- 300
print("10:30:15":FormatToSeconds()) -- 10 hours, 30 minutes and 15 seconds
-- 37815
print("1:00:00:00":FormatToSeconds()) -- 1 day
-- 86400
print("10:00:00:30":FormatToSeconds()) -- 10 days, 30 seconds
-- 864030
等等等等。我認為也許使用 gmatch 會起作用,但仍然是 idk。幫助將不勝感激。
編輯:
因此,我嘗試使用 gmatch 進行此操作,但我不知道這是否是最快的方法(可能不是),因此仍將不勝感激。
(我的代碼)
function ConvertTimeToSeconds(Time)
local Thingy = {}
local TimeInSeconds = 0
for v in string.gmatch(Time, "%d ") do
if tonumber(string.sub(v, 1, 1)) == 0 then
table.insert(Thingy, tonumber(string.sub(v, 2, 2)))
else
table.insert(Thingy, tonumber(v))
end
end
if #Thingy == 1 then
TimeInSeconds = TimeInSeconds Thingy[1]
elseif #Thingy == 2 then
TimeInSeconds = TimeInSeconds (Thingy[1] * 60) Thingy[2]
elseif #Thingy == 3 then
TimeInSeconds = TimeInSeconds (Thingy[1] * 60 * 60) (Thingy[2] * 60) Thingy[3]
elseif #Thingy == 4 then
TimeInSeconds = TimeInSeconds (Thingy[1] * 24 * 60 * 60) (Thingy[2] * 60 * 60) (Thingy[3] * 60) Thingy[4]
end
return TimeInSeconds
end
print(ConvertTimeToSeconds("1:00:00:00"))
uj5u.com熱心網友回復:
在進行任何實際測量之前不要擔心執行速度,除非您正在設計一個時間要求嚴格的程式。在任何極端情況下,您可能都希望將有風險的部分卸載到 C 模塊中。
你的方法很好。您可以清理某些部分:您可以只回傳計算結果,TimeInSeconds因為在您的情況下實際上并不充當累加器;tonumber處理'00'得很好,它可以確保帶有引數的十進制整數(自 5.3 起)。
我會采取另一種方式并在表格中描述因素:
local Factors = {1, 60, 60 * 60, 60 * 60 * 24}
local
function ConvertTimeToSeconds(Time)
local Components = {}
for v in string.gmatch(Time, "%d ") do
table.insert(Components, 1, tonumber(v, 10))
end
if #Components > #Factors then
error("unexpected time component")
end
local TimeInSeconds = 0
for i, v in ipairs(Components) do
TimeInSeconds = TimeInSeconds v * Factors[i]
end
return TimeInSeconds
end
當然,兩種實作都存在模式幼稚的問題,因為它會匹配例如'00 what 10 ever 10'. 要解決這個問題,您可以采用另一種方式來string.match使用例如,'(%d ):(%d ):(%d ):(%d )'并強制執行嚴格的格式,或匹配每個可能的變體。
否則,您可以全力以赴并使用LPeg來決議持續時間。
另一種方法是不在內部使用字串,而是將它們轉換為類似的表格{secs=10, mins=1, hours=10, days=1},然后使用這些表格 - 從該表示中獲取秒數將是直截了當的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/494371.html
