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

Python datetime遇ValueError: year 0 is out of range,求公元元年至今天数

解决datetime不支持公元0年的天数计算问题

错误原因

Python的datetime模块仅支持年份范围在1到9999之间的日期,公元0年不在这个合法区间内,因此调用datetime(0, 1, 1).date()会触发ValueError: year 0 is out of range。另外要明确:公历体系里根本不存在公元0年,公元前1年结束后直接进入公元1年,这是历法的既定规则。

解决方案

方案1:计算公元1年1月1日至今的天数(符合实际历法)

如果你的需求是计算真正的公元元年(即公元1年)1月1日到现在的天数,直接修改起始年份为1即可:

from datetime import datetime

# 设定起始日期为公元1年1月1日
start_date = datetime(1, 1, 1).date()
today = datetime.today().date()

day_diff = today - start_date
print("从公元1年1月1日至今的天数是", day_diff.days, "天")

方案2:模拟“公元0年”的天数计算(仅用于特殊需求)

如果你因特殊场景需要模拟“公元0年”的存在(把公元前1年之后的年份当作0年),可以基于公元1年的计算结果手动调整。由于公元前1年到公元1年之间没有间隔,我们可以给公元1年的计算结果加上365天(假设公元前1年是平年):

from datetime import datetime

start_date = datetime(1, 1, 1).date()
today = datetime.today().date()

day_diff = today - start_date
# 模拟公元0年1月1日到现在的天数
total_days = day_diff.days + 365
print("模拟公元0年1月1日至今的天数是", total_days, "天")

注意:这种模拟方式忽略了历法变更(比如儒略历转格里高利历)带来的日期偏差,仅适用于不需要高精度的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:35:28