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

时间:2014-11-19 17:15:49

标签: python datetime

我想在特定时间段内控制设备(模块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”? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

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

  1. 制作另一个timedelta以表示当前时间,作为自午夜以来的增量
  2. 将开始和结束值转换为实际的时间值
  3. 您可以使用

    为'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()组件并忽略日期部分,但是因为你已经将所有日期基于“今天”,这在这里没有什么区别。