Python 工作日和 strftime("%U")

4
以下有没有解决方法?
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
< p> b.strftime(“%U”)不应该是9吗?因为这是一周的最后一天?< / p>

%U 表示一周的起始日为星期天。 - pp_
1个回答

2

%U将周的起始日视为 星期日,而不是星期一。根据文档

%U
表示本年度的第几周(以星期日为一周的第一天),不足两位则补零。在第一个星期日之前的所有天都被视为第0周。

你可以使用 %W 格式,其表示的是以 星期一 作为一周的第一天的补零周数:

%W
表示本年度的第几周(以星期一为一周的第一天),不足两位则补零。在第一个星期一之前的所有天都被视为第0周。

如果需要按照 ISO 8601 标准获取周数,则可以使用 b.isocalendar()[1]。这里注意,ISO 8601 中规定第1周的定义与其他两种方法不同;%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周数,参见12006问题

1
b.strftime("%W") 或 %W - Cos
@Cos:但那是一种不同的周编号方案。 - Martijn Pieters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接