Python pytz时区与UTC时间相同

时间:2017-04-20 11:53:00

标签: python timezone pytz

在Linux上,我正在尝试使用pytz获取时区转换时间。但是,下面的代码不会返回正确的'Asial / Seoul'时间。

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

这是我在Linux中测试的方式。 datetime.now()返回UTC时间。而且,带有'Asia / Seoul'的pytz时区也会返回相同的UTC时间。

enter image description here

我正在寻找答案如何使用pytz获得正确的时区时间。

2 个答案:

答案 0 :(得分:2)

你正在寻找天真的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>)

你无法从一个天真的时间戳(没有时区)进行时区转换,因为这本身就没有意义。

答案 1 :(得分:-1)

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

这是对的。

在你的linux上,你能告诉我date -R的输出吗?我认为你的机器是tc。