如何在Python中获取周数?

511 投票
20 回答
611882 浏览
提问于 2025-04-15 21:22

如何用Python找出当前年份在6月16日是第几周(第24周)?

20 个回答

87

我觉得 date.isocalendar() 可能就是答案。这篇文章解释了ISO 8601日历背后的数学原理。你可以看看Python文档中 datetime页面里关于date.isocalendar()的部分。

>>> dt = datetime.date(2010, 6, 16) 
>>> wk = dt.isocalendar()[1]
24

.isocalendar() 会返回一个包含三部分的元组,分别是(年份,周数,星期几)。dt.isocalendar()[0] 返回年份,dt.isocalendar()[1] 返回周数,dt.isocalendar()[2] 返回星期几。简单明了。

225

你可以直接从日期时间中获取周数,并以字符串的形式表示。

>>> import datetime
>>> datetime.date(2010, 6, 16).strftime("%V")
'24'

另外,你可以通过改变 strftime 的参数来获取不同类型的周数:

%U - 按周日为一周的第一天计算的年份周数,以零填充的十进制数字表示。新年中在第一个周日之前的所有天数都被视为第0周。示例:00、01、…、53

%W - 按周一为一周的第一天计算的年份周数,以十进制数字表示。新年中在第一个周一之前的所有天数都被视为第0周。示例:00、01、…、53

[...]

(在Python 3.6中新增,部分版本的Python 2.7也进行了移植) 为了方便,包含了一些C89标准中不要求的额外指令。这些参数都对应于ISO 8601日期值。在某些平台上使用 strftime() 方法时,这些可能并不适用。

[...]

%V - ISO 8601周,以十进制数字表示,周一为一周的第一天。第01周是包含1月4日的那一周。示例:01、02、…、53

来源: datetime — 基本日期和时间类型 — Python 3.7.3 文档

我是在 这里了解到这个的。在Python 2.7.6中对我有效。

648

datetime.date 有一个叫 isocalendar() 的方法,这个方法会返回一个包含日历周的元组:

>>> import datetime
>>> datetime.date(2010, 6, 16).isocalendar()[1]
24

datetime.date.isocalendar() 是一个实例方法,它会返回一个元组,里面依次包含了年份、周数和星期几,都是针对给定的日期实例。

在 Python 3.9 及以上版本中,isocalendar() 返回的是一个 命名元组,这个元组有三个字段:year(年份)、week(周数)和 weekday(星期几),这意味着你可以通过名字来明确访问周数:

>>> import datetime
>>> datetime.date(2010, 6, 16).isocalendar().week
24

撰写回答