Lua os.date脚本错误

时间:2015-12-09 12:37:22

标签: lua

以下脚本出错。 你能建议如何解决它吗?

if os.date("%H:%M")>21:00 and os.date("%H:%M")<06:30  
then MV.110 = 1

else MV.110 = 0

end

错误是:

input:1: 'then' expected near ':' 

2 个答案:

答案 0 :(得分:3)

您的代码中有两个语法错误。第一个问题是os.date将日期/时间作为字符串返回,并且您尝试将其与某些单词值进行比较。在引号中至少包裹21:0006:30来比较字符串值(可能不是你想要的)。您可以使用特殊值'*t'调用os.date以获取表格格式的时间,以便您可以比较整数值中的小时/分钟/秒。

您的下一个问题是,110不是表的有效属性名称,因为变量/属性名称不能以lua中的数字开头。如果您真的想使用110作为表中值的关键,那么您将把它用作表格的索引,如下所示:MV['110'] = 1

答案 1 :(得分:2)

Mike's answer中指出的问题外,您还有逻辑错误。

如果您比较字符串,那么您正在进行的比较可以起作用。 "21:00"是一个有效的字符串;没有引号的21:00只是语法错误。

关系运算符(<<=>>=)可以应用于字符串。比较按字典顺序进行,因此"abc" < "def""123" > "0234"。 (它不是数字比较,因此您需要与前导零一致 - os.date("%H:%M")为您做的。)

但即使您更改了代码,也会比较字符串:

if os.date("%H:%M") > "21:00" and os.date("%H:%M") < "06:30" then
...

它无法正常工作,因为没有大于"21:00"且小于"06:30"的字符串。

您还没有完全说出您要做的事情,但我可以假设您要检查当前时间是否在21:00到06:30之间的9小时间隔内。问题是间隔时间跨过午夜,因此简单的比较不会起作用。

您需要检查字符串是否大于"21:00" 小于"06:30"。 (我还没有真正测试过这个逻辑,所以你应该这样做。)

此外,您应该将os.date("%H:%M")的结果保存在变量中。如果你两次打电话,它可能会返回不同的结果;第一个调用可能会返回"21:00",第二个调用可能会返回"21:01"。在这种特殊情况下,它可能不会引起任何问题,但无论如何要小心是个好主意。