如何获得唯一的时间值(H:M:S)并在python中进行比较?

yut 发布于 2019-06-12 datetime 最后更新 2019-06-12 21:16 2 浏览

我想在一段时间内控制设备(模块Raspberry Pi)。我使用PHP Web来配置数据库mysql中的时间值。然后我从数据库获得时间与系统中的时间(实时时钟)进行比较。如果系统时间在mysql => led on之间。 这里是我的表(名称:时间)在MySQL中:

start_time                      stop_time
07:00:00 (Type: time)           08:00:00 (Type:time)
这里是我的代码控制设备:
import MySQLdb
import RPi.GPIO as GPIO
from datetime import date
import time
db_local = MySQLdb.connect("localhost","root","root","luan_van")
with db_local:
      cur = db_local.cursor(MySQLdb.cursors.DictCursor)
      cur.execute("SELECT * FROM time")
      rows = cur.fetchall()
      start = 0
      stop = 0
      for row in rows:
          start = row['start_time']
          stop = row ['stop_time']
tg = strftime("%H:%M:%S", time.localtime())
if( start < tg < stop):
     GPIO.output(12, True)
它错误“不能比较datetime.timedelta str”。 我如何获得系统时间值格式“H:M:S”? 感谢您的帮助。
已邀请:

aet

赞同来自:

您的startstop对象是datetime.timedelta个对象;这些模型的持续时间,而不是一天中的时间。你有两个选择:

  1. 制作另一个timedelta来表示当前时间,作为自午夜以来的增量
  2. 将开始和结束值转换为实际的时间值
您可以使用以下命令为'now'生成timedelta
import datetime
midnight = datetime.datetime.combine(datetime.date.today(), datetime.time.min)
time_since_midnight = datetime.datetime.now() - midnight
然后将其与您的开始和结束进行比较:
if start < time_since_midnight < stop:
在另一个方向,将开始和停止timedeltas转换为datetime.datetime对象意味着您需要将它们添加到midnight对象:
import datetime
midnight = datetime.datetime.combine(datetime.date.today(), datetime.time.min)
now = datetime.datetime.now()
if (midnight + start) < now < (midnight + stop):
后者的一个变体可能是只使用.time()组件并忽略日期部分,但是因为你已经将所有日期基于“今天”,这在这里没有什么区别。