2017-08-02 32 views
-1

来显示时间。当我在一个知道datetime比如我继续得到同样的结果strftime改变tzinfo无法在不同的时区

>>> from datetime import datetime 
>>> import pytz 
>>> fmt = '%d.%m.%Y %H:%M' 
>>> now_naive = datetime.utcnow() 
>>> now_naive.strftime(fmt) 
'02.08.2017 11:53' 

>>> now_aware = now_naive.replace(tzinfo=pytz.timezone('UTC')) 
>>> now_aware_minus_3 = now_aware.replace(tzinfo=pytz.timezone('Etc/GMT-3')) 
>>> now_aware.strftime(fmt) 
'02.08.2017 11:53' 

>>> now_aware_minus_3.strftime(fmt) 
'02.08.2017 11:53' 

这是为什么?如何显示不同时区的当前时间?

+1

这不是一个[重复](https://stackoverflow.com/questions/4008960/pytz-and-etc-gmt-5)? – sophros

+0

这可能有所帮助。 - https://stackoverflow.com/a/18646797/5585424 –

+0

[如何\'strftime \'有时区调整?](https://stackoverflow.com/questions/16722464/how-to-strftime-具有-时区调整) – jimf

回答

0

试试这样:

from datetime import datetime 
from pytz import timezone 

x=datetime.now(timezone('Europe/Madrid')) 
print x 
x=datetime.now(timezone('UTC')) 
print x 
x=datetime.now(timezone('Etc/GMT-3')) 
print x 
0

使用.replace(tzinfo=...)只替换时区的日期时间对象,不执行实际的时区转换。

试试这个:

time_unaware = datetime.utcnow() 
time_utc = pytz.timezone('UTC').localize(time_unaware) # same as .replace(tzinfo=...) 
time_gmt_minus_3 = time_utc.astimezone(pytz.timezone('Etc/GMT-3')) # performs timezone conversion 

time_gmt_minus_3使用.strftime()现在应该表现出你所期望的。

此外,@sophros已经挂here

为了与POSIX风格一致,那些“ETC/GMT”开始的区域具有从大多数人希望他们的标志反转。在这种风格下,格林威治标准时间以西的区域有一个正号,东侧有一个负号。