如何将星期几作为具有月份变化值的整数?
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())
您的代码有两个小错误:
- if 条件错误
- 天的表示不一致:
date.weekday()
是从 0 开始的,date.day
是从 1 开始的
使用 .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())
您的代码有两个小错误:
- if 条件错误
- 天的表示不一致:
date.weekday()
是从 0 开始的,date.day
是从 1 开始的