Python pytz 时区与 UTC 时间相同

Python pytz timezone gives just same as UTC time

在 Linux,我正在尝试使用 pytz 获取时区转换时间。但是,下面的代码没有 return 正确 'Asial/Seoul' 时间。

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

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

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

您正在本地化一个天真的 datetime。这意味着您有一个没有时区信息的 datetime;在其上使用 localize 意味着您要在以前 none 的位置附加时区信息。比较:

>>> 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>)

您不能从天真的时间戳(没有时区)进行时区转换,因为它本身没有任何意义。

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

没错。

在你的 linux 上,你能告诉我 date -R 的输出吗?我假设你机器的 tz 是 utc.