要查看今天是一年中的第几天以及本周是一年中的第几周,可以使用 Python 的 datetime
模块轻松实现。以下是详细方法和代码示例:
方法说明:
-
一年中的第几天:
- 使用
datetime.timetuple().tm_yday
属性 - 返回 1-366 之间的整数(1 表示 1 月 1 日)
- 使用
-
一年中的第几周:
- 使用
datetime.isocalendar()[1]
(ISO 标准周数,周一作为一周开始) - 或
datetime.strftime("%U")
(周日作为一周开始,00-53) - 或
datetime.strftime("%W")
(周一作为一周开始,00-53)
- 使用
完整代码:
from datetime import datetime
# 获取当前日期
today = datetime.now()
# 1. 计算今天是一年中的第几天
day_of_year = today.timetuple().tm_yday
print(f"今天是一年中的第 {day_of_year} 天")
# 2. 计算本周是一年中的第几周(推荐使用 ISO 标准)
week_iso = today.isocalendar()[1] # ISO 标准周数(周一作为一周开始)
print(f"本周是 ISO 标准下的第 {week_iso} 周")
# 3. 其他周数计算方式(可选)
week_sun_start = int(today.strftime("%U")) # 周日作为一周开始(00-53)
week_mon_start = int(today.strftime("%W")) # 周一作为一周开始(00-53)
print(f"以周日开始计算:第 {week_sun_start} 周")
print(f"以周一开始计算:第 {week_mon_start} 周")
输出示例(假设今天是 2025 年 6 月 17 日):
今天是一年中的第 168 天
本周是 ISO 标准下的第 25 周
以周日开始计算:第 25 周
以周一开始计算:第 25 周
注意事项:
-
ISO 周数标准:
- 每周从星期一开始
- 第一周是包含当年第一个星期四的那周
- 一年的最后一周是包含当年最后一个星期四的那周
-
不同标准的差异:
isocalendar()
和%W
都以周一开始,但 ISO 标准对跨年周的处理更符合国际规范%U
(周日开始)美国常用- 推荐使用
isocalendar()
获取国际通用周数
-
跨年情况处理:
# 处理跨年日期(如2025年12月31日) new_years_eve = datetime(2025, 12, 31) year, week, day = new_years_eve.isocalendar() print(f"{new_years_eve.date()} 属于第 {week} 周(ISO 标准)") # 输出:2025-12-31 属于第 1 周(ISO 标准)因为这天属于2026年的第一周
最佳实践:
from datetime import datetime
def get_date_info():
today = datetime.now()
return {
"date": today.date(),
"day_of_year": today.timetuple().tm_yday,
"iso_week": today.isocalendar()[1],
"iso_year": today.isocalendar()[0],
"weekday": today.isocalendar()[2] # 周一=1, 周日=7
}
# 调用示例
info = get_date_info()
print(f"日期: {info['date']}")
print(f"年度第 {info['day_of_year']} 天")
print(f"ISO 周: {info['iso_year']}-W{info['iso_week']:02d}")
print(f"星期: {info['weekday']}")
这些方法可以准确计算任何日期在一年中的位置,满足不同国际标准的需求。