此问题与Get date from week number有关,并且可能是后者的重复,但是,我认为在该问题的公认答案中提出的建议实际上是行不通的。
In [6]: datetime.datetime.strptime('2019-18-1', "%Y-%W-%w")
Out[6]: datetime.datetime(2019, 5, 6, 0, 0)
注意它如何在2019-5-6星期一返回。但是,根据日历(我使用http://whatweekisit.org作为参考),在2019年5月6日第19周的星期一。
类似地,原始问题中提供的示例:
In [7]: datetime.datetime.strptime('2013-26-1', "%Y-%W-%w")
Out[7]: datetime.datetime(2013, 7, 1, 0, 0)
根据http://whatweekisit.org/calendar-2013.html,2013-7-1是第27周的星期一。
也
In [8]: datetime.datetime.strptime('2019-18-1', "%Y-%W-%w").isocalendar()[1]
Out[8]: 19
注意我如何将第18周分配给strptime
,如何使第19周从isocalendar
恢复。
我完全迷失了方向,如果有人可以解释这里发生的事情,我将不胜感激。我最初的目标是从星期数中获取星期开始日期。
答案 0 :(得分:2)
根据我的测试,datetime
认为2019年的第一周(即1月1日至1月6日)不算是第一周,因为它不是整周。 2018年12月31日是一周的一部分,但不在2019年。我想您必须通过检查datetime.datetime.strptime('year-1-1', "%Y-%W-%w") == datetime.datetime.strptime('year-0-1', "%Y-%W-%w")
的输出来适应这一点。如果为假,则减去1。
2018年是一个示例,其中datetime
返回的值与isocalendar
相同,因为该年的第一个星期一是1月1日。
答案 1 :(得分:0)
来自等距docs
:
ISO年度包括52或53个完整星期,其中一个星期从星期一开始,在星期日结束。 ISO年的第一周是包含星期四的一年中的第一个(格里高利历)日历周。这被称为第1周,该周四的ISO年与其公历年相同。
另一方面,void message (int& times)
{
cout << "Message " << times << ".\n";
if (times > 0)
{
message(--times);
}
cout << "Message " << times << " is returning. \n";
}
int main ()
{
int times = 3;
message(times);
return 0;
}
从第一个完整的星期开始,实际上,由于2019年从星期二开始,所以它们从不同的星期开始:
strptime
在2021年(从星期五开始)
import datetime as dt
strp_first = dt.datetime.strptime('2019-1-1', "%Y-%W-%w")
>>> print(strp_first)
2019-01-07 00:00:00
>>> print(strp_first.isocalendar()[1])
2