#python #python-3.x
#python #python-3.x
Вопрос:
Я пытаюсь сравнить datetimes из разных источников (поэтому форматы немного отличаются). По сути, я проверяю, не прошло ли время для затемнения панели отображения, просматривая текущие значения в словаре, который обновляется ежедневно.
Я выяснил, как свести формат ISO только к элементу time ( _ss
ниже), но изо всех сил пытаюсь получить правильное Datetime.datetime
значение ( _herenow
ниже):
Форматы:
_ss 05:50:06
_herenow 08:35:21.992656
Мой код:
def is_day_time():
_now = datetime.datetime.now()
_ss = local_weather.get('mylocal_ss')
_sr = local_weather.get('mylocal_sr')
_ss = _ss.time()
_sr = _sr.time()
_herenow = _now.time()
if _herenow >= _ss or _now <= _sr:
_isnight = 1
mymatrix.DisplayBright(_isnight)
else:
_isnight = 0
mymatrix.DisplayBright(_isnight)
Ошибка, которую я получаю:
if _herenow >= _ss or _now <= _sr:
TypeError: unorderable types: datetime.datetime() <= datetime.time()
Любая помощь была бы очень признательна.
Ответ №1:
Вы хотите использовать только _herenow
, поскольку это time
.
Кроме того, вы можете упростить условный:
_isnight = (_herenow <= _sr or _herenow >= _ss)
mymatrix.DisplayBright(_isnight)
В качестве отступа: нет ничего плохого в том, чтобы добавлять к именам переменных символы подчеркивания, но это странно.
Комментарии:
1. Насколько мне известно, добавление переменных с подчеркиванием означает, что вы не хотите, чтобы к ним прикасались
2. @alec_a Поскольку они находятся в функции, неясно, кто будет их трогать или как в любом случае…
3. @alec_a Да, в области видимости класса. Однако это область действия функции, поэтому эти переменные все равно нельзя трогать.
4. Нет, неправильно, я принял
or
оператор заand
. В конце концов, это не эквивалентно.5. @deceze Я думаю, что в целом это лучше.