如何在Python中获取周数?
如何用Python找出当前年份在6月16日是第几周(第24周)?
20 个回答
我觉得 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]
返回星期几。简单明了。
你可以直接从日期时间中获取周数,并以字符串的形式表示。
>>> 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
我是在 这里了解到这个的。在Python 2.7.6中对我有效。
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