【问题标题】:Python pytz timezone gives just same as UTC timePython pytz 时区与 UTC 时间相同
【发布时间】:2017-09-17 01:02:51
【问题描述】:

在 Linux 上,我正在尝试使用 pytz 获取时区转换时间。但是,下面的代码不会返回正确的“亚洲/首尔”时间。

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

这就是我在 Linux 中测试的方式。 datetime.now() 返回 UTC 时间。而且,带有“亚洲/首尔”的 pytz 时区也返回相同的 UTC 时间。

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

【问题讨论】:

    标签: python timezone pytz


    【解决方案1】:
    from datetime import datetime
    import pytz
    seoul = pytz.timezone('Asia/Seoul')
    curtime = seoul.localize(datetime.now())
    

    这是对的。

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

    【讨论】:

    • 是的,我机器的时区是UTC。
    • 这就是为什么seoul.localize(datetimenow())seoul.localize(datetime.utcnow()) 是一样的。
    【解决方案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>)
    

    您不能从简单的时间戳(没有时区)进行时区转换,因为这本身就没有任何意义。

    【讨论】:

      猜你喜欢
      • 2013-08-26
      • 2014-10-05
      • 2017-06-24
      • 2013-01-04
      • 2018-02-12
      • 2017-06-15
      • 2020-09-01
      • 2017-12-01
      • 2019-09-02
      相关资源
      最近更新 更多