Возвращает количество дней недели для указанной даты c (Python) - PullRequest
0 голосов
/ 09 января 2020

Мне нужно рассчитать цену исходя из заданной даты в будние дни месяца. Это то, с чем я сейчас работаю:

month = time.month
year = time.year
weekdays = 0
cal = calendar.Calendar()
for day in cal.itermonthdates(year, month):
  if day.weekday() == 6 and day.month == month:
    weekdays += 1

Но это не зависит от определенной даты. Я хочу, чтобы это возвращало 6 для даты 10.01.2020, или 6 для 03.01.2020 или 4 для 06.01.2020. Любая помощь будет очень хорошей.

Ответы [ 2 ]

0 голосов
/ 09 января 2020

Попробуйте:

import datetime
d=datetime.date(2020, 1, 10) #Format YYYY, MM, DD
print(d.isoweekday())

Теперь будет напечатано 5, а не 6, поскольку это пятница, и отсчет начинается в понедельник (использование isoweekday вместо дня недели позволит отсчету начать с 1 вместо 0) но это должно быть легко исправить, если вы хотите, чтобы ваша неделя начиналась в воскресенье, просто добавьте 1 и рассчитайте по модулю 7:

print((d.isoweekday()+1)%7)

https://docs.python.org/3/library/datetime.html

0 голосов
/ 09 января 2020

Следующим может быть dry подход:

import datetime
# ...

prev_day = time.day - datetime.timedelta(days=1)
month = time.month
year = time.year

cal = calendar.Calendar()
days_iterator = cal.itermonthdates(year, month)

while next(days_iterator) != prev_day:
    pass

weekdays = 0
for d in days_iterator:
  if d.weekday() == 6 and d.month == month:
    weekdays += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...