【问题标题】:set a datetime with a specific timezone设置具有特定时区的日期时间
【发布时间】:2021-09-12 12:10:16
【问题描述】:

我在 Heroku 上有一个脚本,因此我不知道每次重启时它驻留在哪里(-> 我无法手动设置 datetime.timedelta),我需要在罗马时间下午 5 点运行一个例程。这个脚本一直有效,至少在今年冬天是这样,但现在它开始一小时,所以是下午 6 点。

import datetime
import pytz


tz = pytz.timezone("Europe/Rome")

now = datetime.datetime.now(tz=tz)
start = datetime.datetime(now.year, now.month, now.day, hour=17, tzinfo=tz)

This answer 表明

使用标准日期时间构造函数的 tzinfo 参数对许多时区的 pytz “不起作用”

所以我尝试使用 tz.localize(start) 进行重构,但在第一次重新启动时,系统将例程安排在下午 3 点,两小时前 。我很困惑:如何在特定时区设置特定时间?

【问题讨论】:

  • 我们有 2021 年 6 月 - 如果可以,请避免使用 pytz。使用zoneinfo(Python 3.9 的标准库)- 没有这样的问题。
  • @MrFuppes 升级到 python 3.9 是可能的,但恐怕需要注意其他依赖项。目前,我正在考虑任何其他可能性
  • 其他可能性是通过backports 使用zoneinfo 或使用dateutil(它可以很好地转换为zoneinfo 模块)。两种可能

标签: python timezone pytz


【解决方案1】:

因为我需要快速解决这个问题,所以我接受了@MrFuppes 给我的将 Python 版本升级到 3.9 的提示,因为我使用的是 3.7,所以这没什么大不了的,至少对于我的依赖项而言。

使用ZoneInfo

from zoneinfo import ZoneInfo
import datetime


tz = ZoneInfo("Europe/Rome")

now = datetime.datetime.now(tz=tz)
start = datetime.datetime(now.year, now.month, now.day, hour=17, tzinfo=tz)

【讨论】:

    猜你喜欢
    • 2011-04-09
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多