最简单可靠的方法是用 datetime 模块的 timetuple().tm_yday 属性,直接获取年积日整数值;也可用 strftime('%j') 得到三位字符串形式。

Python 判断某一天是一年中的第几天,最简单可靠的方法是用 datetime 模块的 timetuple().tm_yday 属性,或者直接用 strftime('%j')。
用 timetuple().tm_yday 获取年积日
这是最直观、推荐的方式。每个 date 或 datetime 对象调用 timetuple() 后,返回一个 time.struct_time,其中 tm_yday 就是该日期在当年的第几天(1~366)。
示例:
from datetime import dated = date(2024, 3, 15) # 2024年3月15日 day_of_year = d.timetuple().tm_yday print(day_of_year) # 输出:75
用 strftime('%j') 格式化获取
%j 是 strftime 的专用格式码,表示“一年中的第几天”,返回三位数字符串(如 '075'),适合需要字符串输出或对齐显示的场景。
立即学习“Python免费学习笔记(深入)”;
示例:
from datetime import datetimedt = datetime(2023, 12, 31) day_str = dt.strftime('%j') print(day_str) # 输出:'365' print(int(day_str)) # 转为整数:365
手动计算(不推荐,仅作理解)
如果不用标准库,可以按月份累加天数,注意闰年二月是29天。但容易出错,且重复造轮子。
关键逻辑包括:
- 定义平年各月天数列表:
[31, 28, 31, 30, ...] - 判断是否闰年:
year % 4 == 0 and (year % 100 != 0 or year % 400 == 0) - 若闰年且月份 > 2,则总天数 +1
处理字符串日期输入
如果原始数据是字符串(如 "2024-03-15"),先用 strptime 解析成日期对象再计算:
from datetime import datetimes = "2024-03-15" d = datetime.strptime(s, "%Y-%m-%d") print(d.timetuple().tm_yday) # 75
基本上就这些。优先用 timetuple().tm_yday,简洁、准确、无需额外依赖。











