我正在windows 7计算机上使用pyExchange。我有一个简单的pythonv2.7脚本,用于从exchange服务器检索Outlook日历事件。脚本如下:
代码:
from pyexchange import Exchange2010Service, ExchangeNTLMAuthConnection
from datetime import datetime
import time
from pytz import timezone
def getEvents():
URL = u'https://xxxxx.de/EWS/Exchange.asmx'
USERNAME = u'MS.LOCAL\\xxxxx'
PASSWORD = u"xxxxxx"
connection = ExchangeNTLMAuthConnection(url=URL,
username=USERNAME,
password=PASSWORD)
service = Exchange2010Service(connection)
timestamp = datetime.now()
print timestamp.strftime('%Y, %m, %d, %H, %M, %S')
print time.timezone
eventsList = service.calendar().list_events(
start=timezone("Europe/Amsterdam").localize(datetime(2015, 1, 19, 0, 0, 0)),
end=timezone("Europe/Amsterdam").localize(datetime(2015, 1, 19, 23, 59, 59)),
details=True
)
for event in eventsList.events:
print "{start} {stop} - {subject} - {room}".format(
start=event.start,
stop=event.end,
subject=event.subject,
room=event.location
)
getEvents()
问题:
事件的时间戳与Outlook中事件的时间戳不匹配。我使用Outlook和pyExchange脚本手动创建事件。在
例如:如果我在Outlook中从11:00 AM - 11:30 AM
创建一个事件,那么上面的脚本将以10:00 AM - 10:30 AM
的形式返回该事件的时间戳。时间少了一个小时。在
如果我检查我的时区它返回W. Europe Standard Time
。我也在脚本中指定了我的时区,即Europe/Amsterdam
。但问题依然存在。我还检查了Outlook的时区设置。如下图所示:
我登录到Exchange服务器,它也与我的客户机位于同一时区。在
有什么建议可以解释为什么时间不合适?这是pyExchange中的bug吗?我真的很感激,如果有人能测试这一点,并在这里报告,只是为了确定不是只有我才面临这个问题。在
我看了一下,这可能不是pyexchange中的bug,而是您如何处理时区。毫无遗憾,它们在Python中非常混乱。在
首先,包返回的是UTC格式的活动日期,而不是本地时间。因为时区是+1 UTC,所以您看到的时间比预期时间少了一个小时。以下是我使用您的脚本从日历中提取的一个事件(这是start/end/name/room):
注意+00:00-这意味着它在UTC。加利福尼亚的中午是协调世界时20:00。在
总是,总是,在处理日期时间时使用UTC。这里有一些来自pytz民间的文档why localtimes are dangerous.
PyExchange试图支持您,并将localtime转换为UTC,但它始终返回UTC。这是故意的,因为看到前面的链接。在
现在,来回答你的问题,让它发挥作用。首先,使用以下提示将本地时间转换为UTC:
对你来说,这意味着你必须做一些丑陋的事情,比如:
^{pr2}$然后,如果要将UTC日期显示为自己的时间,请执行以下操作:
当我这样做时,我会看到脚本的输出:
我会料到的。中午我的时间是晚上9点你的时间。在
Here's a gist of your script that I changed.看看它是否解决了您的问题。如果没有,我很高兴再看一次!在
相关问题 更多 >
编程相关推荐