设置具有特定时区的日期时间
Posted
技术标签:
【中文标题】设置具有特定时区的日期时间【英文标题】: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 点,两小时前 。我很困惑:如何在特定时区设置特定时间?
【问题讨论】:
这能回答你的问题吗? How can I force pytz to use currently standard timezones? 我们有 2021 年 6 月 - 如果可以,请避免使用pytz
。使用zoneinfo(Python 3.9 的标准库)- 没有这样的问题。
@MrFuppes 升级到 python 3.9 是可能的,但恐怕需要注意其他依赖项。目前,我正在考虑任何其他可能性
其他可能性是通过backports 使用zoneinfo
或使用dateutil(它可以很好地转换为zoneinfo 模块)。两种可能
【参考方案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)
【讨论】:
以上是关于设置具有特定时区的日期时间的主要内容,如果未能解决你的问题,请参考以下文章
PHP,Codeigniter:如何在Web应用程序中根据用户时区/位置设置日期/时间?
Python - 在特定时区设置日期时间(没有 UTC 转换)