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

获取次日(元旦)时间戳失败:日期超出当月范围

问题原因
  • 这个错误并非仅在新年前夜出现,每个月的最后一天执行都会触发。比如1月31日时,today.day +1会得到32,而1月最多只有31天,直接将这个值传入datetime构造器就会抛出ValueError: day is out of range for month。同理,4月30日、6月30日等所有月末日期都会出现同样问题。
解决方法

不要手动给日期的day字段加1,改用datetime.timedelta来计算次日,它会自动处理月份、年份的进位逻辑,同时要注意保持时区的一致性:

修改后的代码:

from datetime import datetime, timedelta
from pytz import timezone

study_timezone = timezone('Europe/London')
# 直接获取带时区的当前时间,替代localize方式
today = datetime.now(study_timezone)
print("today:", today)

# 先将当前时间转为当日0点,再加1天得到次日0点
tomorrow = today.replace(hour=0, minute=0, second=0, microsecond=0) + timedelta(days=1)
# 转换为时间戳输出
print("Timestamp_Tomorrow: ", int(tomorrow.timestamp()))

关键说明

  • 使用datetime.now(study_timezone)是获取带时区时间的更稳妥方式,比localize更简洁,还能避免naive时间(无时区信息的datetime对象)引发的潜在问题。
  • timedelta(days=1)会自动处理日期进位:比如12月31日加1天会自动变为次年1月1日,31日加1天会自动切换到下月初,彻底规避日期越界的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:15:37