Как исправить эту ошибку : exchangelib.errors.InvalidTypeError: 'tzinfo' <UTC> должен быть типа <class 'exchangelib.ewsdatetime.EWSTimeZone'>.
В моем проекте Django я изменил версию Exchangelib (3.2.1 на 4.9.0) и теперь возникает ошибка.
Traceback :
Перед вызовом метода create я использую этот код для преобразования временной метки в экземпляр EWSDateTime.
LOCAL_TZ = pytz.timezone('Europe/Paris')
def timestamp_to_ews_datetime(timestamp):
"""
Transform timestamp to EWSDateTime instance
:param timestamp:
:return:
"""
temp_datetime = datetime.datetime.fromtimestamp(timestamp / 1000.0)
temp_datetime = pytz.utc.localize(temp_datetime, is_dst=None).astimezone(LOCAL_TZ)
return EWSDateTime.from_datetime(temp_datetime)
Я изменил значение LOCAL_TZ, но это не работает :
LOCAL_TZ = EWSTimeZone('Europe/Paris')
Я не знаю, есть ли проблема в этом коде.
На этот вопрос ответили в https://github.com/ecederstrand/exchangelib/issues/1140#issuecomment-1308814613:
Когда вы пытаетесь сохранить EWSDateTime
в базе данных, пакет sqlite3
локализует значения времени даты до UTC, а затем удаляет информацию о часовом поясе. EWSDateTime
экземпляры не позволяют удалять информацию о часовом поясе.
Когда вы устанавливаете значение для поля модели Django, вы должны использовать обычный объект datetime
. Самый простой способ преобразования из EWSDateTime
в datetime
, вероятно, следующий:
>>> from exchangelib import EWSDateTime, EWSTimeZone
>>> from datetime import datetime
>>> d = EWSDateTime(2013, 2, 1, tzinfo=EWSTimeZone.localzone())
>>> datetime(*d.timetuple()[:6], tzinfo=d.tzinfo)
datetime.datetime(2013, 1, 2, 0, 0, tzinfo=EWSTimeZone(key='Europe/Copenhagen'))