我想在特定时间段内控制设备(模块Raspberry Pi)。我创建一个PHP Web来配置数据库mysql中的时间值。然后我从数据库中抽出时间来比较系统中的时间(实时时钟)。如果系统时间在mysql =>之间的时间之间领导。
这是我在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”? 谢谢你的帮助。
答案 0 :(得分:0)
您的start
和stop
个对象是 datetime.timedelta
个对象;这些模型持续时间,而不是一天中的时间。你有两个选择:
timedelta
以表示当前时间,作为自午夜以来的增量您可以使用
为'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()
组件并忽略日期部分,但是因为你已经将所有日期基于“今天”,这在这里没有什么区别。