Получить первый и последний день номера данной недели в Python

Мне нужна функция, которая возвращает первый и последний день соответственно понедельник и воскресенье данного номера недели (и года).

В течение нескольких недель возникают трудности, когда 1 января не понедельник, поэтому я не могу использовать стандарт datetime.datetime.strptime(),

1 ответ

Решение

Вот решение:

import calendar
import datetime
from datetime import timedelta

def get_start_and_end_date_from_calendar_week(year, calendar_week):       
    monday = datetime.datetime.strptime(f'{year}-{calendar_week}-1', "%Y-%W-%w").date()
    return monday, monday + datetime.timedelta(days=6.9)

Я расширил великую логику этого поста.

Обновить

Есть подводный камень с первой календарной недели. Некоторые страны по-разному обрабатывают номер первой недели. Например, в Германии, если первая неделя января имеет менее 4 дней, она считается последней неделей предыдущего года. В Википедии есть обзор.

Эта другая версия, найденная здесь, безупречна и проста: https://www.pythonprogramming.in/how-to-get-start-and-end-of-week-data-from-a-given-date.html

##
# Python's program to get start and end of week

from datetime import datetime, timedelta

date_str = '2018-01-14'
date_obj = datetime.strptime(date_str, '%Y-%m-%d')

start_of_week = date_obj - timedelta(days=date_obj.weekday())  # Monday
end_of_week = start_of_week + timedelta(days=6)  # Sunday
print(start_of_week)
print(end_of_week)
Другие вопросы по тегам