以下脚本出错。 你能建议如何解决它吗?
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 ':'
答案 0 :(得分:3)
您的代码中有两个语法错误。第一个问题是os.date
将日期/时间作为字符串返回,并且您尝试将其与某些单词值进行比较。在引号中至少包裹21:00
和06: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"
。在这种特殊情况下,它可能不会引起任何问题,但无论如何要小心是个好主意。