Mer*_*tor 3 python datetime pytz
我在使用pytz库(最新版本2012h)在Python中的时区之间进行转换时遇到问题.在布鲁塞尔,我们的冬季通常为UTC + 1小时,夏季为UTC + 2小时.
我有以下代码:
from datetime import datetime
import pytz
brussels_tz = pytz.timezone('Europe/Brussels')
utc_tz = pytz.utc
def main():
intermdate = datetime(2012, 07, 15, 8, 0, 0, 0, brussels_tz)
utcdate = intermdate.astimezone(utc_tz)
print "Brussels time is %s" % intermdate
print "UTC time is %s" % utcdate
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
问题是我得到以下结果:
Brussels time is 2012-07-15 08:00:00+00:00
UTC time is 2012-07-15 08:00:00+00:00
Run Code Online (Sandbox Code Playgroud)
所以没有区别.在我看来,结果应该是(在夏天):
Brussels time is 2012-07-15 08:00:00+02:00
UTC time is 2012-07-15 06:00:00+00:00
Run Code Online (Sandbox Code Playgroud)
如果我使用欧洲/巴黎时区(通常与布鲁塞尔同时),我会得到更奇怪的结果:
Paris time is 2012-07-15 08:00:00+00:09
UTC time is 2012-07-15 07:51:00+00:00
Run Code Online (Sandbox Code Playgroud)
9分钟的差异!?!
有人能帮助我吗?
您需要使用该.localize()方法将日期时间移动到时区:
intermdate = brussels_tz.localize(datetime(2012, 07, 15, 8, 0, 0, 0))
utcdate = intermdate.astimezone(utc_tz)
Run Code Online (Sandbox Code Playgroud)
输出是:
Brussels time is 2012-07-15 08:00:00+02:00
UTC time is 2012-07-15 06:00:00+00:00
Run Code Online (Sandbox Code Playgroud)
查看pytz文档:
不幸的是,对于许多时区,使用标准日期时间构造函数的'tzinfo参数''与pytz不兼容.
Run Code Online (Sandbox Code Playgroud)>>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=amsterdam).strftime(fmt) '2002-10-27 12:00:00 AMT+0020'
| 归档时间: |
|
| 查看次数: |
1348 次 |
| 最近记录: |