当我使用msg.SentOn.stftime("%Y-%m-%d %H:%M:%S %Z %z %p")
时,我将GMT作为时区,但所有消息时间都在IST中,例如在1.30PM IST
发送的电子邮件显示2017-09-19 13:30:51 GMT+00:00 +000
。但我想要的是2017-09-19 09:00:51 GMT+00:00 +000
。代码如下
import datetime, win32com.client as win32
outlook = win32.Dispatch("Outlook.Application").GetNamespace("MAPI")
excel = win32.gencache.EnsureDispatch("Excel.Application")
inbox = outlook.GetDefaultFolder(6)
for msg in inbox.Items:
print(msg.SentOn.strftime("%Y-%m-%d %H:%M:%S %Z %z %p"), msg.Subject)
答案 0 :(得分:1)
我使用此代码固定了message.SentOn
的时区。
from datetime import datetime
import pytz
def fix_timezone(dt):
local_tz = dt.astimezone().tzinfo # is there a cleaner way to get the local tz?
shifted = dt.replace(tzinfo=local_tz)
return shifted.astimezone(pytz.utc)
wrong_time = datetime(2019, 6, 1, 17, 0, 16, tzinfo=pytz.utc)
correct_time_utc = fix_timezone(wrong_time)
print(correct_time_utc)
我试图找到一种更干净的方法来获取本地计算机的时区,但对发现的内容不满意。我只是从astimezone()
答案 1 :(得分:0)
这实际上比我想象的容易得多。
Python有一个名为pytz
的库,可以与datetime
结合使用,以便轻松进行时区转换。
这可以通过使用.astimezone(pytz.timezone([TIMEZONE]))
来完成,将[TIMEZONE]
替换为此列表中您需要的任何时区:
https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
请参阅下面的示例,该示例将邮件发送时间的时区设置为America/Los_Angeles
:
import datetime, pytz, win32com.client as win32
outlook = win32.Dispatch("Outlook.Application").GetNamespace("MAPI")
excel = win32.gencache.EnsureDispatch("Excel.Application")
inbox = outlook.GetDefaultFolder(6)
for msg in inbox.Items:
print(msg.SentOn.astimezone(pytz.timezone('America/Los_Angeles')).strftime("%Y-%m-%d %H:%M:%S %Z %z %p"), msg.Subject)