如何将日期时间转换为不同的时区?

How to convert datetime to different timezone?

我正在尝试将日期时间字符串转换为不同的时区。我的代码有效,但结果不是我想要的。

我已经尝试了 .localize().astimezone 但输出是一样的。

phtimezone = timezone('Asia/Manila')
test = datetime.datetime.strptime('Sun Sep 16 03:38:40 +0000 2018','%a %b %d %H:%M:%S +0000 %Y')
date = phtimezone.localize(test)
print (date) 
date = test.astimezone(phtimezone)
print (date)

输出为2018-09-16 03:38:40+08:00。我期待它是 2018-09-16 11:38:40+08:00.

您解析的对象 test 不包含时区。这是一个天真的 datetime 对象。同时使用 localizeastimezone 不能进行任何转换,因为它们不知道它们从什么开始转换;所以他们只是附加给天真的时区 datetime.

同时解析时区:

datetime.strptime('Sun Sep 16 03:38:40 +0000 2018','%a %b %d %H:%M:%S %z %Y')
                                                                      ^^

这为您提供了一个 UTC 时区的 aware datetime 对象,它可以 converted 到其他时区。

感谢@deceze,我得以修复它。这是代码:

phtimezone = pytz.timezone('Asia/Manila')
test = datetime.datetime.strptime('Sun Sep 16 03:38:40 +0000 2018','%a %b %d %H:%M:%S %z %Y')
test_utc = test.replace(tzinfo=timezone('UTC'))
date = test_utc.astimezone(pytz.timezone('Asia/Manila'))
print (date)

输出现在是2018-09-16 11:38:40+08:00