Python如何判断指定日期是否为对应时区的夏令时(DST)变更日
Python 实现判断指定时区某日是否为夏令时调整日
实现逻辑
我们可以通过对比当日零点和次日零点的夏令时状态判断当日是否存在DST调整:如果两个时间点的夏令时偏移不同,说明当日发生了时钟调整。
完整代码实现
import pytz import datetime def is_dst_change(day, timezone): tz = pytz.timezone(timezone) # 转换为date对象,兼容输入datetime的情况 if isinstance(day, datetime.datetime): day = day.date() # 构造当日0点和次日0点的原生datetime day_start = datetime.datetime(day.year, day.month, day.day) next_day_start = day_start + datetime.timedelta(days=1) # 本地化处理,is_dst=None遇到歧义时间会抛出错误避免误判 loc_day_start = tz.localize(day_start, is_dst=None) loc_next_day_start = tz.localize(next_day_start, is_dst=None) # 对比夏令时偏移是否变化 return loc_day_start.dst() != loc_next_day_start.dst() # 测试用例 # 欧洲马德里时区2021年夏令时调整日为3月28日和10月31日 print(is_dst_change(day=datetime.datetime(year=2021, month=3, day=28), timezone = 'Europe/Madrid')) # 输出True print(is_dst_change(day=datetime.datetime(year=2021, month=10, day=31), timezone = 'Europe/Madrid')) # 输出True print(is_dst_change(day=datetime.datetime(year=2021, month=2, day=1), timezone = 'Europe/Madrid')) # 输出False print(is_dst_change(day=datetime.datetime(year=2021, month=7, day=1), timezone = 'Europe/Madrid')) # 输出False
代码说明
- 自动适配pytz内置的所有时区的DST规则,不需要手动维护各地的夏令时调整日期
- 兼容输入为
datetime.date或datetime.datetime类型的day参数 - 利用pytz内置的时区规则计算,判断结果完全符合各地区官方的夏令时调整安排
内容的提问来源于stack exchange,提问作者IgnacioGaBo
相关产品推荐
相关产品推荐

