我想创建一个每周第一周的星期日活动。
这就是我正在为特定的一周编号做的事情,这是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)
答案 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年份与其公历年相同。