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

时间:2019-02-26 04:01:09

标签: lua

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

现在,我正在使用os.date()进行字符串比较,并将其解析为字符串。它可以工作,但是代码不是很漂亮,如果时间改变了,我必须在两个不同的变量中手动更改时间,对于LUA来说我还很陌生,所以我一直很难找出实现此目的的最佳方法

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

1 个答案:

答案 0 :(得分: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变量以跟踪(在应用程序重新启动之间),请获取当前的“ 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.date和os.time可使您的代码独立于当前设置的日期locale


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

现在,当您需要更改预配置的时间时,只需更改第一个任务的时间日期,第二个任务就会自动偏移。

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