добавление определенного количества времени в питоне - PullRequest
0 голосов
/ 14 июня 2019

Мой код:

from datetime import datetime, date,time
timeobj = time(0, 5)
start = datetime.now().time()
time1 = datetime.combine(date.min, start) - datetime.combine(date.min, timeobj)
tx = start+time1 # throws error in here
if (start >= tx):
   pass #do stuff

Я получаю эту ошибку:

TypeError: неподдерживаемые типы операндов для +: 'datetime.time' и 'datetime.timedelta'

Может кто-нибудь помочь мне решить эту проблему? Я просто хочу использовать оператор "if" выше.

Ответы [ 3 ]

0 голосов
/ 14 июня 2019

Проблема здесь в том, что start - это объект datetime.time, а time1 - это временная дельта между двумя datetime.datetimes, поэтому оператор + не имеет смысла объединять их, что приводит к ошибке.Я не совсем уверен, чего вы пытаетесь достичь, но в целом убедитесь, что ваша переменная start относится к типу, к которому можно добавить timedelta, например:

from datetime import datetime, date,time
timeobj = time(0, 5)
start_time =  datetime.now().time()
start = datetime.combine(date(1, 2, 3), start_time)  # here start is a datetime object
time1 = datetime.combine(date.min, start_time) - datetime.combine(date.min, timeobj)
tx = start+time1
0 голосов
/ 14 июня 2019

Не усложняйте, вам нужно только сравнить начало и время (5 утра). Зачем? Это потому, что вы просто сравниваете, если текущее время меньше 5 утра. Давайте сделаем некоторую базовую алгебру.

given:
time1 = start - timeobj
tx = start + time1

thus: if (start >= tx) is the same with
      start >= start + start - timeobj
      0 >= start - timeobj
      timeobj >= start 
  (is current time earlier than 5am?)

ОБНОВЛЕННЫЙ СКРИПТ:

from datetime import datetime, date,time
timeobj = time(0, 5)
start = datetime.now().time()
#time1 = datetime.combine(date.min, start) - datetime.combine(date.min, timeobj)
#tx = start+time1 # throws error in here
if (timeobj >= start ):
    print('pass')
    pass #do stuff
0 голосов
/ 14 июня 2019

Вот мое предложение:

from datetime import datetime, date, time
timeobj = time(0,5)
start = datetime.combine(date.min, datetime.now().time())
time1 = datetime.combine(date.min, start) - datetime.combine(date.min, timeobj)
tx = (start+time1).time()
if start.time() > tx:
    pass # do stuff
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...