在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时间。
我正在寻找答案如何使用pytz获得正确的时区时间。
答案 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。