python pytz timezone与UTC时间相同
问题描述:
在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时间。
我在寻找答案如何得到正确的时区的时间与pytz。
答
您正在本地化一个天真的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>)
你不能从一个天真的时间戳(没有时区)做一个时区转换,因为这本质上没有任何意义。
谢谢!它现在适用于'datetime.now(tz = seoul)' – Justin