如何在lua中为datetime添加分和秒?
我有一个lua功能,可以尝试将当前播放歌曲的持续时间(例如hh:mm:ss)转换为秒如何在lua中为datetime添加分和秒?,time,lua,rainmeter,Time,Lua,Rainmeter,我有一个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; fo
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
以获取歌曲的估计结束时间
但在短时间内,可能会错过小时或分钟
当运行时,我得到的是输入:10:“do”预期接近“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")
您混淆了为循环编写
的两种可能方法:
a)
对于i=1,10 do
打印(i,“此循环用于向上(或向下)计数)
结束
b)
对于键,ipair({“hello”,“world”})中的值
打印(键,值,“此循环用于使用迭代器函数”)
结束
正如您所看到的,第一个简单地计算一个数字,i
。第二个是非常通用的,可以用来迭代几乎任何东西(例如使用io.lines
),但最常用于对
和ipairs
来迭代表
您也不会为…编写。。。在tab
中,其中tab
是一个表;必须使用ipairs
,然后返回表的迭代器(这是一个函数)
您还错误地使用了string.gmatch
;它不返回表,而是返回字符串中模式匹配项的迭代器函数,因此您可以这样使用它:
localmatches={}
对于某些字符串中的单词:gmatch(“[^]”)do
表.插入(匹配项,word)
结束
这将为您提供一个包含匹配项的实际表,但是如果您只想在该表上迭代,那么您最好直接使用gmatch
循环
mytable do中i=1,v的
计数=i+1
结束
我想你只是想数一数表中的元素?您可以使用#
操作符轻松获得表的长度,因此#mytable
如果您有一个类似于hh:mm:ss
的字符串,但是小时和分钟可能会丢失,最简单的方法可能是用0填充它们。要实现这一点,一种有点老套但很短的方法是在字符串中添加“00:00:”
,然后查找其中的最后3个数字:
local hours, minutes, seconds = ("00:00:"..inputstr):match("(%d%d):(%d%d):(%d%d)$")
如果没有遗漏任何内容,您将得到类似的00:00:hh:mm:ss
,您只需要取的最后3个值就可以得到正确的时间。您混淆了为
循环编写的两种可能方法:
a)
对于i=1,10 do
打印(i,“此循环用于向上(或向下)计数)
结束
b)
对于键,ipair({“hello”,“world”})中的值
打印(键,值,“此循环用于使用迭代器函数”)
结束
正如您所看到的,第一个简单地计算一个数字,i
。第二个是非常通用的,可以用来迭代几乎任何东西(例如使用io.lines
),但最常用于对
和ipairs
来迭代表
您也不会为…编写。。。在tab
中,其中tab
是一个表;必须使用ipairs
,然后返回表的迭代器(这是一个函数)
您还错误地使用了string.gmatch
;它不返回表,而是返回字符串中模式匹配项的迭代器函数,因此您可以这样使用它:
localmatches={}
对于某些字符串中的单词:gmatch(“[^]”)do
表.插入(匹配项,word)
结束
这将为您提供一个包含匹配项的实际表,但是如果您只想在该表上迭代,那么您最好直接使用gmatch
循环
mytable do中i=1,v的
计数=i+1
结束
我想你只是想数一数表中的元素?您可以使用#
操作符轻松获得表的长度,因此#mytable
如果您有一个类似于hh:mm:ss
的字符串,但是小时和分钟可能会丢失,最简单的方法可能是用0填充它们。要实现这一点,一种有点老套但很短的方法是在字符串中添加“00:00:”
,然后查找其中的最后3个数字:
local hours, minutes, seconds = ("00:00:"..inputstr):match("(%d%d):(%d%d):(%d%d)$")
如果没有遗漏任何内容,您将得到类似于00:00:hh:mm:ss的结果,您只需要取的最后3个值以正确的时间结束。对于mytable do中的i=1,v,这是不正确的。读取mytable do中i=1,v的,这是不正确的。请阅读直接使用gmatch的问题,因为可选元素,我需要颠倒顺序。我在向后迭代它时遇到了很多麻烦,如果它不是一个表,我想这是有意义的。这就像我在受挫前的第五次尝试。我几乎希望这是一个xy问题,有一个更容易解决的问题。我的研究是关于“你可以很容易地用#运算符得到一个表的长度,所以#mytable”说#在技术上对于表是未定义的,这可能在更新版本的lua中得到了修复,但是我不确定rainmeter打包的是什么版本。#
从来都是未定义的。对于序列,它返回长度,当您的表有间隙时,唯一“奇怪”的事情发生了,比如{1,2,nil,4}
,在这种情况下#
将返回2
或4
,具体取决于特定的实现细节;但是,这仍然是定义的行为,并且不像人们在现实世界中期望的那样经常发生。取决于特定的实现细节
在我看来,当我将lua作为一个整体来看待时,有点像是未定义行为的定义吗?下一步,当它在我面前时,我会再尝试一次。不过,它是有定义的。未定义的行为可能意味着您的计算机