Python - текущее время в двух значениях datetime - PullRequest
0 голосов
/ 05 июня 2018

Я какое-то время оглядывался по сторонам, пытаясь найти разные варианты принятых ответов, но они слишком неуместны для моих собственных нужд, и 90% требуют статической типизации текущей даты, чего я не хочу делать

Контекст

Довольно просто.

Получить текущее время в Испании.

Уже установлена ​​переменная, согласованнаявремя начала.

Имейте уже установленную переменную, которая является согласованным временем окончания.

Если текущее время в Испании находится между временем начала и начала, продолжите сохранение журналов

Потоки проверены на решение моей проблемы

Все бесполезно, недооценено или неактуально из-за статической типизации datetime

Текущее время Python

Сравнить даты Python

Преобразовать строку в дату и время

Сравнить дату и дату и время

Проверьте, если время между двумя днями

Преобразовать строкув datetime

Сравните, если datetime.timedelta находится между двумя значениями

Код пока

now_time_uk = datetime.datetime.now()
current_time_spain = now_time + datetime.timedelta(hours=1)
start = datetime.time(10, 50)
end = datetime.time(16, 00)

if current_time_spain >= start or current_time_spain <= end:
    print('Start logging')
else:
    print('No need to log')

Приведенный выше код был извлечен из потока на SO, который был принятым ответом. Когда я запускал его, он выдает ошибку TypeError

TypeError: can't compare datetime.datetime to datetime.time

Код принятого ответа

now_time_uk = datetime.datetime.now()
print(now_time_uk)
current_time_spain = now_time_uk + datetime.timedelta(hours=1)
start = datetime.time(10, 50)
end = datetime.time(17, 00)
print(current_time_spain.time())

if current_time_spain.time() >= start and current_time_spain.time() <= end:
    print('Start logging')
else:
    print('No need to log')

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

Как и в сообщении об ошибке, вы пытаетесь сравнить datetime объекты с time объектами, что невозможно ... к счастью, у объекта datetime есть встроенный метод для преобразования в объект time, и этоэто .time().Таким образом, вы можете заменить:

if current_time_spain >= start or current_time_spain <= end:

на

if current_time_spain.time() >= start or current_time_spain.time() <= end:

И это должно работать.Другой способ сделать это - установить current_time_spain с самого начала как объект time, или другой вариант - установить значения start и end равными datetime объектам вместо time

0 голосов
/ 05 июня 2018

Невозможно сравнить дату и время, но вы можете продолжать использовать TimeDelta для создания начальной и конечной даты для сравнения.С этим решением ваш код может стать:

now_time_uk = date time.datetime.now()
current_time_spain = now_time + datetime.timedelta(hours=1)
start_hours = 10
start_minutes = 50
end_hours = 16
end_minutes = 0
time_spain_start = current_time_spain + datetime.timedelta(hours=start_hours, minutes=start_minutes)
time_spain_end = current_time_spain + datetime.timedelta(hours=end_hours, minutes=end_minutes)

if current_time_spain >= time_spain_start or current_time_spain <= spain_time_end:
    print “Start logging”
else:
    print “No need to log”

Таким образом, вы также можете добавить переменную для каждого параметра объекта TimeDelta, чтобы иметь разное время для даты окончания, даже если день следующийили все, что вы хотите или нужно.Мы можем представить, что все переменные days , hours , minutes и seconds инициализированы значением 0, поэтому вам нужно изменитьтолько то значение, которое вам нужно.

0 голосов
/ 05 июня 2018

Вы сравниваете datetime объект с датой и временем только с time, как указано в ошибке

datetime.datetime.now(), это возвращает дату и время, тогда как datetime.time(10, 50) возвращает время.

Если вы хотите сравнить только время, то почему бы вам просто не сравнить часы и минуты с now()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...