如何查找一年python中每月第一周的所有周数

时间:2017-07-04 12:29:48

标签: python django date time calendar

我想创建一个每周第一周的星期日活动。

这就是我正在为特定的一周编号做的事情,这是Done获得约会的第一周:

june

所以我需要一个月份第一周的所有周数的列表,这样我就可以循环播放并获得愿望日期。

添加更多信息

我想要一个返回周数列表的方法,这个月号是第一周,第一周表示周有第一个星期日。

from datetime import datetime
myDate = "2017 22 0"
# here `2017` is year, `22` is week number and `0` =sunday is week day
datetime.strptime(myDate, "%Y %W %w")

#output...
datetime.datetime(2017, 6, 4, 0, 0)

2 个答案:

答案 0 :(得分:2)

(已编辑,因为工作日编号错误)

>>> import datetime
>>> june1 = datetime.datetime(2017,6,1)
>>> june1
datetime.datetime(2017, 6, 1, 0, 0)
>>> june1_weekday = june1.weekday()
>>> if june1_weekday < 6:  # 6 indicates Sunday
        first_sunday_in_june = june1 + datetime.timedelta(days=6-june1_weekday)
else:
        first_sunday_in_june = june1


>>> print(first_sunday_in_june)
2017-06-04 00:00:00

假设您需要ISO周数,则可以使用isocalendar()方法。这给出了一个元组(year, weeknumber, weekday)。这使用了周从星期一开始的约定,一年的第一周是第一周,一年中至少有四天(换句话说,就是第一个星期四的一周)。

>>> first_sunday_in_june.isocalendar()
(2017, 22, 7)

如果你有另一个年度第一天或第一周的约定,你必须自己酿造一个函数来获得周数。

在几个月的循环中使用上述方法,您可以使用周数创建所需的列表。

答案 1 :(得分:1)

我已经完成了几个月的循环,然后得到了第一个星期天(从月初1 st 开始到第二天,直到找到星期天),然后得到了一周 - 发现日期年份:

from datetime import datetime
from datetime import date

# dayofweek: Sunday=0, Monday=1 and so on
def get_week_number(year=2017, dayofweek=0):
    weeks = []

    for month in range(1, 13):
        # get first Sunday of month
        d = date(year, month, 1)
        while(d.weekday() != dayofweek):
            d = d.replace(day=d.day + 1)

        # isocalendar()[1] is the week-of-year field
        weeks.append(d.isocalendar()[1])

    return weeks

print(get_week_number(2017, 0))

但结果与您的预期不同:

[1, 6, 10, 14, 18, 23, 27, 32, 36, 40, 45, 49]

我也试过了weeks.append(int(d.strftime("%W"))),但结果相同 - 我使用的是Python 3.5.2和a week is defined as

  

ISO年份包括52或53整周,其中一周从星期一开始,到星期日结束。 ISO年的第一周是包含星期四的第一个(格里高利)日历周。这称为第1周,该星期四的ISO年份与其公历年相同。