You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pendulum.parse指定dst_rule无效,如何处理夏令时模糊时间?

解决pendulum解析夏令时重复时间的问题

我明白你的困扰:欧洲柏林时区在2017年10月29日会把时钟从03:00回拨到02:00,导致02:30这个时间点出现两次——一次是夏令时(UTC+2),一次是冬令时(UTC+1)。你用pendulum.parse()指定dst_rule却没得到预期的夏令时时间,这是因为dst_rule参数在pendulum中主要用来处理不存在的时间点(比如春季夏令时开始时跳过的时间段),而非重复的时间点。

要拿到第一次出现的2017-10-29T02:30:00+02:00,可以试试这两种方法:

方法一:用pendulum.localize()明确指定规则

先创建一个无时区信息的naive时间,再通过localize()方法绑定时区并强制选择转换前的夏令时版本:

import pendulum

# 创建不带时区的原始时间
naive_dt = pendulum.datetime(2017, 10, 29, 2, 30, 0)
# 本地化到柏林时区,指定取夏令时转换前的时间
target_dt = pendulum.localize(naive_dt, tz='Europe/Berlin', dst_rule=pendulum.PRE_TRANSITION)
print(str(target_dt))  # 输出: 2017-10-29T02:30:00+02:00

方法二:通过UTC时间反向转换

第一次出现的02:30+02:00对应的UTC时间是00:30,我们可以先构造这个UTC时间,再转换到柏林时区:

import pendulum

# 创建UTC时间点
utc_dt = pendulum.datetime(2017, 10, 29, 0, 30, 0, tz='UTC')
# 转换到欧洲柏林时区
target_dt = utc_dt.in_timezone('Europe/Berlin')
print(str(target_dt))  # 输出: 2017-10-29T02:30:00+02:00

这两种方法都能精准拿到你需要的夏令时版本时间,相比直接用parse()更适合处理这种重复时间的场景。

内容的提问来源于stack exchange,提问作者cbergmiller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:39:59