Преобразование datetime.min в смещение с учетом datetime - PullRequest
2 голосов
/ 24 мая 2019

Мне нужно вычесть datetime.now () с учетом часового пояса с datetime.min, но я продолжаю получать эту ошибку Ошибка типа: не могу вычесть смещенные наивные и смещенные datetime . Пожалуйста, помогите!

from datetime import datetime
from pytz import timezone
now = datetime.now(timezone('Europe/Dublin'))
result = now - datetime.min

Ответы [ 2 ]

3 голосов
/ 24 мая 2019

Вы можете преобразовать его в UTC:

In [1]: from datetime import datetime

In [2]: import pytz

In [3]: dt_min = datetime.min

In [4]: print(dt_min)
0001-01-01 00:00:00

In [5]: dt_min = dt_min.replace(tzinfo=pytz.UTC)

In [6]: print(dt_min)
0001-01-01 00:00:00+00:00

Таким образом, ваш код будет:

from datetime import datetime
import pytz
now = datetime.now(pytz.timezone('Europe/Dublin'))
dt_min = datetime.min
result = now - dt_min.replace(tzinfo=pytz.UTC)
print(result)

output:
737202 days, 7:27:48.839353
1 голос
/ 24 мая 2019

datetime.min не имеет прикрепленной к нему информации о часовом поясе, следовательно, "смещение-наивное". now имеет прикрепленную к нему информацию о часовом поясе («Дублин»), следовательно, «смещенную».

Для выполнения временных манипуляций с datetime объектами необходимо, чтобы они были согласованными. Подумайте, как бы вы вычли «13:22:45» без ТЗ из «22:00:00 SAST»? «13:22:45» также GMT ​​+ 2? Вы не знаете.

Так что конвертируйте один из них в нужный вам часовой пояс. Преобразование datetime.min в ваш часовой пояс будет иметь ошибку OverflowError, поэтому идите другим путем.

tz = timezone('Europe/Dublin')
now_utc = pytz.UTC.normalize(now)
now_naive = now_utc.replace(tzinfo=None)
result_timedelta = now_naive - datetime.min
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...