Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在lua中为datetime添加分和秒?_Time_Lua_Rainmeter - Fatal编程技术网

如何在lua中为datetime添加分和秒?

如何在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

我有一个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
以获取歌曲的估计结束时间

但在短时间内,可能会错过小时或分钟

当运行时,我得到的是
输入: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作为一个整体来看待时,有点像是未定义行为的定义吗?下一步,当它在我面前时,我会再尝试一次。不过,它是有定义的。未定义的行为可能意味着您的计算机