2017-04-20 157 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