2017-08-02 31 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」開始的區域具有從大多數人希望他們的標誌反轉。在這種風格下,格林威治標準時間以西的區域有一個正號,東側有一個負號。