从星期数获取星期开始日期

时间:2019-05-10 17:49:49

标签: python

此问题与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恢复。

我完全迷失了方向,如果有人可以解释这里发生的事情,我将不胜感激。我最初的目标是从星期数中获取星期开始日期。

2 个答案:

答案 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