使用LUA运行服务器,我需要每天在特定时间触发一个功能

问题描述 投票:1回答:1

所以我正在运行一个每分钟执行一次的LUA脚本,这是由软件控制的,我无法控制执行的时间。我想每天查看时间并在特定时间触发功能。但是,我希望在此之前5分钟执行另一个脚本。

现在我正在使用os.date()进行字符串比较并将其解析为字符串。它有效,但代码不漂亮,如果时间发生变化,我必须手动改变两个不同变量的时间,我对LUA很新,所以我一直很难找到最好的方法来做到这一点。

所以问题是,如何设置时间变量,并将该变量与os.date(或os.time)进行比较?

lua
1个回答
2
投票

在纯粹的Lua中做定时器没有任何奇特的方法。你可以做些什么来避免os.date()字符串,是生成带有预设日期的时间戳,os.time接受a key-value table to set a date

timestamp = os.time({year=2019, month=1, day=n})

通过迭代增加n变量,您将收到2019年1月1日之后每个新的n日的时间戳。

os.date("%Y-%m-%d %H-%M-%S",os.time({year=2019,month=1,day=900})
--> 2021-06-18 12-00-00

如果您无法保存day变量以跟踪(在应用程序重新启动之间),请获取当前的“今天”日并从那里进行迭代:

os.date("%Y-%m-%d %H-%M-%S",
    os.time({year=os.date("%Y"),month=os.date("%m"),day=os.date("%d")+n}
)

使用带有自定义格式和os.time的os.date使您的代码独立于当前设置的日期locale


确定第一个任务的时间戳后,将第二个实际任务偏移五分钟secondTaskTimestamp = fistTaskTimestamp + 5*60(或再次使用os.time)。您的计时器检查程序现在只应比较时间戳。

现在,当您必须更改预配置时间时,您只需更改第一个任务的时间日期,第二个任务将自动抵消。

相关:How do I execute a global function on a specific day at a specific time in Lua?

© www.soinside.com 2019 - 2024. All rights reserved.