相关疑难解决方法(0)

pytz:为什么在时区之间转换时需要规范化?

我正在阅读不那么完整的pytz文档,而且我一直在理解它的一部分.

时区之间的转换也需要特别注意.这也需要使用normalize方法来确保转换是正确的.

>>> utc_dt = utc.localize(datetime.utcfromtimestamp(1143408899))
>>> utc_dt.strftime(fmt)
'2006-03-26 21:34:59 UTC+0000'
>>> au_tz = timezone('Australia/Sydney')
>>> au_dt = au_tz.normalize(utc_dt.astimezone(au_tz))
>>> au_dt.strftime(fmt)
'2006-03-27 08:34:59 EST+1100'
>>> utc_dt2 = utc.normalize(au_dt.astimezone(utc))
>>> utc_dt2.strftime(fmt)
'2006-03-26 21:34:59 UTC+0000'
Run Code Online (Sandbox Code Playgroud)

没有使用过这个例子normalize,结果就是这样.在我看来,这个例子并没有真正解释为什么我们必须在不同时区的对象normalize之间进行转换datetime时使用.

有人请给我一个例子(如上所述),结果在不使用时有所不同normalize.

谢谢

python timezone pytz

23
推荐指数
2
解决办法
8733
查看次数

python-tz我错了还是个bug

有点奇怪的是,当我想通过pytz获得欧洲/巴黎的时区时,它会让我进入PMT时区而不是GMT + 1,这似乎适用于欧洲/柏林.

不清楚 ?那么看看这个片段:

#!/usr/bin/python
import os
import datetime
from pytz.tzfile import build_tzinfo

base='/usr/share/zoneinfo/'
tz = build_tzinfo('Europe/Paris',
                  open(os.path.join(base,'Europe','Paris'), 'rb'))
fmt = '%Y-%m-%d %H:%M:%S %Z%z'
print datetime.datetime(2009, 01, 30, 9, 00, tzinfo=tz).strftime(fmt)

tz = build_tzinfo('Europe/Berlin',
                  open(os.path.join(base,'Europe','Berlin'), 'rb'))

print datetime.datetime(2009, 01, 30, 9, 00, tzinfo=tz).strftime(fmt)
Run Code Online (Sandbox Code Playgroud)

输出是:

2009-01-30 09:00:00 PMT+0009
2009-01-30 09:00:00 CET+0100
Run Code Online (Sandbox Code Playgroud)

当真正的巴黎应该也是CET + 1.

从datetime.datetime.now(tz)构造无论如何都能得到正确的结果.

有人有想法吗?

python timezone

4
推荐指数
1
解决办法
1583
查看次数

标签 统计

python ×2

timezone ×2

pytz ×1