【问题标题】:Converting time zone in Python [duplicate]在Python中转换时区[重复]
【发布时间】:2021-04-16 16:50:58
【问题描述】:

自纪元以来我有时间,我正在将其转换为日期时间。

import datetime
s = '1346114717'
t = datetime.datetime.fromtimestamp(float(s))

这是正确的吗? t 在哪个时区?如何将其转换为 PST/PDT

【问题讨论】:

    标签: python datetime time


    【解决方案1】:

    默认情况下,python datetime 是不知道时区的(它没有任何时区信息)。你可以通过使用 pytz 让它知道。但我建议你看看像 arrow 这样的库,它会让事情变得更容易。

    【讨论】:

      【解决方案2】:

      假设您的字符串表示自 1970 年 1 月 1 日以来的 Unix 时间/秒,它指的是 UTC。你可以把它转换成datetimelike

      from datetime import datetime, timezone
      
      s = '1346114717'
      dt = datetime.fromtimestamp(int(s), tz=timezone.utc)
      
      print(dt.isoformat())
      # 2012-08-28T00:45:17+00:00
      

      请注意,如果您不提供时区,则生成的 datetime 对象将是幼稚的,即不“知道”时区。默认情况下,Python 会将其视为本地时间(您机器的操作系统设置)。

      要转换为美国/太平洋时间,您可以使用 Python 3.9 标准库中的zoneinfo

      from zoneinfo import ZoneInfo
      
      dt_pacific = dt.astimezone(ZoneInfo('US/Pacific'))
      print(dt_pacific.isoformat())
      # 2012-08-27T17:45:17-07:00
      

      或者在旧版本的 Python 中使用 dateutil

      from dateutil.tz import gettz # pip install python-dateutil
      
      dt_pacific = dt.astimezone(gettz('US/Pacific'))
      print(dt_pacific.isoformat())
      # 2012-08-27T17:45:17-07:00
      

      【讨论】:

      • 哇,我第一次看到zoneinfo。另一个 Python 日期时间内置工具。我不知道该怎么想。感谢您添加示例。
      • @TomWojcik:zoneinfo 最近由PEP 615 介绍。您还可以通过backports module 将它与旧的 Python 版本一起使用。我认为是时候将时区处理内置到 Python 中了。
      猜你喜欢
      • 2017-02-27
      • 2021-09-09
      • 1970-01-01
      • 2012-10-31
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      • 2013-11-24
      • 1970-01-01
      相关资源
      最近更新 更多