2017-02-03 108 views
2

最近,我一直在使用Youtube API v3(是的,我知道它並不適用於Lua),但是當我需要將ISO 8601持續時間轉換爲格式化的字符串時,Web上的任何內容都不會有所幫助。我一直在各地搜索,尋找一個特定的圖書館,可以幫助這種事情,但不幸的是,沒有Lua。除了Lua之外,還有其他語言的數千個圖書館。如何將ISO 8601持續時間轉換爲Lua中格式化的字符串?

而現在,似乎我堅持使用字符串模式,我甚至不知道如何使用。那麼我該怎麼去做這項工作呢?

的ISO 8601持續時間的

例子: PT3M33S

我想把它轉換成這樣的: 3:33

+1

你看着https://luarocks.org/modules/tieske/date? – greatwolf

+0

我有,但它沒有我需要的功能.. – Keanu73

回答

3

如果你不想分析整個ISO 8601規範,試試這個代碼:

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

它使用Lua模式匹配。該模式顯示爲:跳過所有內容,直到一連串的數字後面跟着一個M,然後找到一連串的數字後跟一個S。捕獲兩位數字並在替換模式中使用它們。

如果你想提取兩個號碼,使用:

s="PT3M33S" 
M,S=s:match("^.-(%d+)M(%d+)S") 
print(M,S) 
+0

這絕對有效。謝謝。 – Keanu73

+0

只是問,它是如何工作的? – Keanu73

+0

如果你想處理長達數小時的視頻和其他角落案例(也許一個視頻<1分鐘就會生成例如「PT48S」?),你可以嘗試匹配「(%d *)H」,「(%d *) M「,」(%d *)S「,將會得到一個空字符串(缺少字段/隱式零)或一串數字。 「tonumber(v)或0'會讓你的數字。 '當地N = tonumber; (s:匹配「(%d *)H」)或0,N(s:匹配「(%d *)M」)或0,N(s:匹配「 )S「)或0(注意,這假定你知道輸入是有效的 - 否則它是垃圾進入,垃​​圾出來。) – nobody

相關問題