如何将星期几作为具有月份变化值的整数?

How to Get Day of Week as Integer with First of Month Changing Values?

使用 .weekday() 查找从今天到明年(从今天起 +365 天)每天的星期几(Monday = 0 ... Sunday = 6) .现在的问题是,如果一个月的第一天从周中开始,那么我需要 return 一周中的第一天现在是 = 0.

例如。如果该月开始 Wednesday,则 Wednesday = 0... Sunday = 4(仅限该周)。

Annotated Picture of Month Explaining What I Want to Do

最初有以下代码但错误,因为第一个语句将 运行 7 天无论如何。

import datetime
from datetime import date

for day in range (1,365):
    departure_date = date.today() + datetime.timedelta(days=day)

    if departure_date.weekday() < 7:
        day_of_week = departure_date.day
    else:
        day_of_week = departure_date.weekday()

对于任何日期 D.M.Y,获取 1.M.Y 的工作日 W

那么您只需调整该月前 7-W 天的工作日值。要调整,只需减去值 W.

2021 年 9 月的示例:月份的第一个日期 (1.9.2021) 是星期三,因此 W 是 2。您需要将日期 1.9.2021 的工作日调整为 5.9.2021(因为 7-2 是 5)在那个月减去 2。

对于每个日期,获取该月的第一周。然后,检查日期是否在第一周内。如果是,请使用 .day - 1 值(因为您是基于 0 的)。否则,使用 .weekday().

from datetime import date, datetime, timedelta

for day in range (-5, 40):
    departure_date = date.today() + timedelta(days=day)
    
    first_week = date(departure_date.year, departure_date.month, 1).isocalendar()[1]

    if first_week == departure_date.isocalendar()[1]:
        day_of_week = departure_date.day - 1
    else:
        day_of_week = departure_date.weekday()

    print(departure_date, day_of_week)
2021-08-27 4
2021-08-28 5
2021-08-29 6
2021-08-30 0
2021-08-31 1
2021-09-01 0
2021-09-02 1
2021-09-03 2
2021-09-04 3
2021-09-05 4
2021-09-06 0
2021-09-07 1
2021-09-08 2
2021-09-09 3
2021-09-10 4
2021-09-11 5
2021-09-12 6
2021-09-13 0
2021-09-14 1
2021-09-15 2
2021-09-16 3
2021-09-17 4
2021-09-18 5
2021-09-19 6
2021-09-20 0
2021-09-21 1
2021-09-22 2
2021-09-23 3
2021-09-24 4
2021-09-25 5
2021-09-26 6
2021-09-27 0
2021-09-28 1
2021-09-29 2
2021-09-30 3
2021-10-01 0
2021-10-02 1
2021-10-03 2
2021-10-04 0
2021-10-05 1
2021-10-06 2
2021-10-07 3
2021-10-08 4
2021-10-09 5
2021-10-10 6

以下似乎可以正确完成工作:

import datetime as dt

def custom_weekday(date):
    if date.weekday() > (date.day-1):
        return date.day - 1
    else:
        return date.weekday()
        
for day in range (1,366):
    departure_date = dt.date.today() + dt.timedelta(days=day)
    day_of_week = custom_weekday(date=departure_date)
    print(departure_date, day_of_week, departure_date.weekday())

您的代码有两个小错误:

  1. if 条件错误
  2. 天的表示不一致:date.weekday() 是从 0 开始的,date.day 是从 1 开始的