当前时间等于另一个时间时如何使用函数:Python

时间:2018-07-09 19:54:33

标签: python raspberry-pi raspberry-pi3

我正在开发一个脚本,该脚本利用我制作的功能来控制Raspberry Pi 3上8通道继电器板的继电器。该功能有效,并调用该功能有效。我正在尝试开发此脚本,以便当当前时间等于另一个时间(例如1区开始时间)时,继电器会根据代码中另一部分接收到的状态打开/关闭。

我已经测试过了,但这次不等于部分,一切正常。当我添加这种级别的复杂性时,我似乎遇到了一些问题。这是我的代码示例:

while True: 
  from datetime import datetime
  import time
  import smbus    

  ValveStatus='00000001' #0 is closed, 1 is open.
  R1_1,R2_1,R3_1,R4_1,R5_1,R6_1,R7_1,R8_1=list(map(int, ValveStatus))


  currenttime=datetime.today().strftime('%Y-%m-%d %H:%M:%S')
  Z1S_Timestamp='2018-07-09 10:25:11'


 if(currenttime==Z1S_Timestamp):
    if(R8_1==1):
        SetRelayState(BoardOne,8,"ON")
    else:
        SetRelayState(BoardOne,8,"OFF")

无论我更改了多少次代码,这种计时方法都无法使用。它永远不会进入回路,因此继电器永远不会断开。有没有比仅仅具有if语句更好的方法呢?我可以编辑它,但是继电器仍需要在开始时间前后打开。我认为留出1或2分钟的间隔是可以的,因为计时完全相等就不必100%了。

会是这样的:

currenttime= '2018-07-09 12:53:55' #hard coding just for example purposes

if('2018-07-09 12:52:55' <= currenttime <= '2018-07-09 12:54:55'):
     do the things

是更有效/正确/ Python正确的方法吗?

1 个答案:

答案 0 :(得分:0)

当然-我会做相反的事情-将所有时间都转换为datetime()个对象,并使用它们进行比较:

TIME_MARGIN = datetime.timedelta(seconds=120) # use a margin of 2 minutes

time_compare = datetime.datetime(2018, 7, 9, 12, 52, 55)

current_time = datetime.datetime.now()

if (time_compare - TIME_MARGIN) < current_time < (time_compare + TIME_MARGIN):
     #do something