【问题标题】:Moved time zones now datetime.utcnow() is incorrect现在移动时区 datetime.utcnow() 不正确
【发布时间】:2016-09-05 22:14:45
【问题描述】:

我正在开发一个在特定时间触发通知的 Python 应用程序。我开始在意大利做这个项目,程序运行良好,但现在我回到美国,时间完全错了。实际时间和显示的时间有四个小时的时差,这很奇怪,因为意大利提前了 6 个小时。

例如 datetime.utcnow() 显示的时间是 2016-05-10T18:55:47.920001Z 但实际时间是 2016-05-10T14:55:47.920001Z

now = datetime.datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time

我尝试使用 pytz 设置时区(这给了我正确的时间),但我将当前时间发送到(Google 日历)的 API 不会接受它。这个时间不接受,但上面那行代码是,但是时间不对。

eastern = pytz.timezone("America/New_York")
now = datetime.datetime.now(tz=eastern).isoformat() + 'Z' # 'Z' indicates UTC time

如何让 datetime.datetime.utcnow() 反映我当前的时间?

【问题讨论】:

标签: python datetime time google-calendar-api pytz


【解决方案1】:

试试:

from datetime import datetime, timezone

# 'Z' indicates UTC time
now = datetime.now(timezone.utc).astimezone().isoformat() + 'Z'
print(now)

【讨论】:

    【解决方案2】:

    .utcnow() 以 UTC 格式返回时间。无论您身在何处,它都会返回完全相同的值。 UTC 时间在意大利和美国是一样的。

    生成rfc3339 timestamp.utcnow().isoformat() + 'Z'是正确的。

    datetime.now(eastern).isoformat() + 'Z' 是错误的。只使用datetime.now(eastern).isoformat():

    >>> from datetime import datetime
    >>> import pytz
    >>> eastern = pytz.timezone('America/New_York')
    >>> datetime.utcnow().isoformat()+'Z', datetime.now(eastern).isoformat()
    ('2016-05-11T15:25:18.857833Z', '2016-05-11T11:25:18.857860-04:00')
    

    两者都返回相同的时间(如果我们忽略微秒)。今天 15:25UTC 与纽约的 11:25 是同一时间:

    <local time> == <utc time> + <utc offset>
       11:25     ==   15:25    +   (-04:00)
    

    【讨论】:

      猜你喜欢
      • 2016-04-13
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 2015-04-18
      • 2018-06-07
      • 1970-01-01
      相关资源
      最近更新 更多