exchangelib 的更新从 EWSTimeZone 中删除了属性 'localize'
The update of exchangelib remove the attribute 'localize' from EWSTimeZone
我使用的是旧版本的库 exchangelib。
在我的应用程序的某些用户开始出现问题之前,我的代码一切正常。
长话短说,我必须为我和我们其他人安装最新版本的 exchangelib
exchangelib==4.7.2
所以我的问题是:如何替换方法:
tz.localize(EWSDateTime.from_datetime(dt_start_time))
过滤我收件箱中的电子邮件(或其他)
请找到一小部分代码,以便于阅读:
from exchangelib import Credentials, Account, Configuration, DELEGATE, FileAttachment
from exchangelib import EWSTimeZone, EWSDateTime
import datetime as dt
# fill in with your Credentials
_outAcctName = ''
_pwd = ''
_subjectEmailToLookFor = ''
o_cred= Credentials(username = _outAcctName, password = _pwd)
o_account = Account(credentials = o_cred, primary_smtp_address = _outAcctName, autodiscover = True, access_type = DELEGATE)
o_inbox = o_account.inbox
# Filtering
d_paramFilter = {}
d_paramFilter['subject__icontains'] = _subjectEmailToLookFor
dt_start_time = dt.datetime.strptime('2022-03-13', '%Y-%m-%d')
dt_end_time = dt.datetime.strptime( '2022-03-15', '%Y-%m-%d')
tz = EWSTimeZone.localzone()
try:
tz_start = tz.localize(EWSDateTime.from_datetime(dt_start_time))
tz_end = tz.localize(EWSDateTime.from_datetime(dt_end_time))
d_paramFilter['datetime_received__range'] = (tz_start, tz_end)
except Exception as err:
print(' ERROR 1: |{}|'.format(err))
try:
o_emails = o_inbox.filter(**d_paramFilter)
except Exception as err:
print(' ERROR 2: |{}|'.format(err))
我现在得到错误:
错误 1:|'EWSTimeZone' 对象没有属性 'localize'|
我知道以下文档。但这并没有说明使用什么来获得相同的功能。
较新版本的 exchangelib 具有支持直接将时区分配给日期的时区实现:
EWSDateTime(2017, 9, 5, 8, 30, tzinfo=EWSTimeZone('Europe/Copenhagen'))
这基于 Python 3.9 中的新 zoneinfo module,具有相同的语法和保证。
与问题无关,但您可以通过直接调用 EWSDateTime.strptime()
来简化代码:
EWSDateTime.strptime("2022-03-13", "%Y-%m-%d")
尝试使用以下内容:
tz_start = EWSDateTime.from_datetime(dt_start_time).astimezone(tz)
tz_end = EWSDateTime.from_datetime(dt_end_time).astimezone(tz)
对我有用
我使用的是旧版本的库 exchangelib。 在我的应用程序的某些用户开始出现问题之前,我的代码一切正常。 长话短说,我必须为我和我们其他人安装最新版本的 exchangelib exchangelib==4.7.2
所以我的问题是:如何替换方法: tz.localize(EWSDateTime.from_datetime(dt_start_time)) 过滤我收件箱中的电子邮件(或其他)
请找到一小部分代码,以便于阅读:
from exchangelib import Credentials, Account, Configuration, DELEGATE, FileAttachment
from exchangelib import EWSTimeZone, EWSDateTime
import datetime as dt
# fill in with your Credentials
_outAcctName = ''
_pwd = ''
_subjectEmailToLookFor = ''
o_cred= Credentials(username = _outAcctName, password = _pwd)
o_account = Account(credentials = o_cred, primary_smtp_address = _outAcctName, autodiscover = True, access_type = DELEGATE)
o_inbox = o_account.inbox
# Filtering
d_paramFilter = {}
d_paramFilter['subject__icontains'] = _subjectEmailToLookFor
dt_start_time = dt.datetime.strptime('2022-03-13', '%Y-%m-%d')
dt_end_time = dt.datetime.strptime( '2022-03-15', '%Y-%m-%d')
tz = EWSTimeZone.localzone()
try:
tz_start = tz.localize(EWSDateTime.from_datetime(dt_start_time))
tz_end = tz.localize(EWSDateTime.from_datetime(dt_end_time))
d_paramFilter['datetime_received__range'] = (tz_start, tz_end)
except Exception as err:
print(' ERROR 1: |{}|'.format(err))
try:
o_emails = o_inbox.filter(**d_paramFilter)
except Exception as err:
print(' ERROR 2: |{}|'.format(err))
我现在得到错误: 错误 1:|'EWSTimeZone' 对象没有属性 'localize'|
我知道以下文档。但这并没有说明使用什么来获得相同的功能。
较新版本的 exchangelib 具有支持直接将时区分配给日期的时区实现:
EWSDateTime(2017, 9, 5, 8, 30, tzinfo=EWSTimeZone('Europe/Copenhagen'))
这基于 Python 3.9 中的新 zoneinfo module,具有相同的语法和保证。
与问题无关,但您可以通过直接调用 EWSDateTime.strptime()
来简化代码:
EWSDateTime.strptime("2022-03-13", "%Y-%m-%d")
尝试使用以下内容:
tz_start = EWSDateTime.from_datetime(dt_start_time).astimezone(tz)
tz_end = EWSDateTime.from_datetime(dt_end_time).astimezone(tz)
对我有用