Как исправить эту ошибку : 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'))
Вернуться на верх