часовой пояс осведомлен против часового пояса - PullRequest
2 голосов
/ 03 апреля 2012

Я работаю с объектами datetime в python.У меня есть функция, которая занимает время и находит разницу между тем временем и сейчас.

def function(past_time):
    now = datetime.now()
    diff = now - past_time

Когда я инициализировал past_time перед передачей этой функции, я инициализировал его как наивный datetime.И теперь также наивный объект даты и времени.Однако, когда я пытаюсь вызвать эту функцию, я получаю сообщение об ошибке: не могу вычесть смещенные наивные и с учетом даты и времени.Почему это так, если оба они теоретически являются наивными объектами даты и времени?

Буду признателен за любую помощь.Спасибо!

Ответы [ 2 ]

6 голосов
/ 03 апреля 2012

datetime не выполняет никаких расчетов между часовыми поясами, потому что это сложная и сложная тема.

Я предлагаю универсально преобразовать даты в UTC и выполнить математические расчеты по ним.

Я недавно закончилпроект, использующий часовые пояса в большом проекте на python / Django, и после исследования пошел с внутренним преобразованием в UTC и преобразованием только для отображения пользователю.

Вы должны заглянуть в pytz , чтобы сделатьпреобразование в / из UTC и сохранение кодов Олсона для часовых поясов, которые вы хотите в своем приложении - возможно, связанные с каждым пользователем или соответствующие вашей программе.

0 голосов
/ 27 марта 2019

Использование:

    now = now.replace(tzinfo=past_time.tzinfo)

перед diff = сейчас - past_time.

так, чтобы и now, и past_time имели одинаковую tzinfo.

только в том случае, если сейчас и в прошлом время было в одном часовом поясе.

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