2017-04-20 162 views
0

在Linux上,我試圖使用pytz獲取時區轉換時間。但是,下面的代碼不會返回正確的'Asial/Seoul'時間。python pytz timezone與UTC時間相同

from datetime import datetime 
from pytz 
seoul = pytz.timezone('Asia/Seoul') 
curtime = seoul.localize(datetime.now()) 

這就是我在Linux中測試的方式。 datetime.now()返回UTC時間。而且,'亞洲/首爾'的pytz時區也會返回相同的UTC時間。

enter image description here

我在尋找答案如何得到正確的時區的時間與pytz。

回答

1

您正在本地化一個天真的datetime。這意味着你有一個datetime沒有時區信息;使用localize就意味着你將時區信息附加在以前沒有的地方。比較:

>>> datetime.now() 
datetime.datetime(2017, 4, 20, 14, 0, 0, 0) 
>>> seoul.localize(datetime.now()) 
datetime.datetime(2017, 4, 20, 14, 0, 0, 0, tzinfo=<DstTzInfo 'Asia/Seoul' KST+9:00:00 STD>) 

這是同一時間,曾經和曾經沒有時區信息。

如果你想獲得當前時間在首爾,你需要創建datetime與時區:

>>> datetime.now(tz=seoul) 
datetime.datetime(2017, 4, 20, 21, 0, 0, 0, tzinfo=<DstTzInfo 'Asia/Seoul' KST+9:00:00 STD>) 

或者,你把它已經有一個時區的時間戳,並將其轉換:

>>> datetime.now(tz=timezone.utc).astimezone(seoul) 
datetime.datetime(2017, 4, 20, 21, 0, 0, 0, tzinfo=<DstTzInfo 'Asia/Seoul' KST+9:00:00 STD>) 

你不能從一個天真的時間戳(沒有時區)做一個時區轉換,因爲這本質上沒有任何意義。

+0

謝謝!它現在適用於'datetime.now(tz = seoul)' – Justin

-1
from datetime import datetime 
import pytz 
seoul = pytz.timezone('Asia/Seoul') 
curtime = seoul.localize(datetime.now()) 

這是對的。

在你的linux上,你能告訴我輸出date -R嗎?我認爲你的機器的UTZ是utc。

+0

是的,我的機器的時區是utc。 – Justin

+0

爲什麼'seoul.localize(datetimenow())'和'seoul.localize(datetime.utcnow())'是一樣的。 – Cheney