是否有以下
的解决方法from datetime import datetime, timedelta
a = datetime.now() # <== 2016-03-09 11:06:04.824047
print a.strftime("%U")
>>> 10
#go back to previous Sunday
b = a - timedelta(days = 3)
print b.strftime("%U")
>>> 10
print b.weekday()
>>> 6
不应该b.strftime("%U")
与{1}}一样,是一周的最后一天吗?
答案 0 :(得分:1)
%U
将星期视为星期日,而不是星期一。来自documentation:
%U
作为零填充十进制数的一年中的周数(星期日作为一周的第一天)。在第一个星期日之前的新年中的所有日子都被认为是在第0周。
您可以使用%W
格式,该格式根据星期一作为一周的第一天提供零填充周数:
%W
一年中的周数(星期一作为一周的第一天)作为十进制数。在第一个星期一之前的新年中的所有日子都被认为是在第0周。
如果您需要根据ISO 8601获取周数,则可以使用b.isocalendar()[1]
。第1周的规则与ISO日历计算不同; %W
基于这一年的第一个星期一,而ISO 8601则指出包含1月4日的那一周是第一周。对于2016年,两个系统都是一致的,但在2014年,2015年或2019年情况并非如此:
>>> d = datetime(2019, 3, 9)
>>> d.strftime('%W')
'09'
>>> d.isocalendar()[1]
10
如果您等到Python 3.6,可以使用%V
格式包含ISO周号,请参阅issue 12006。