Трудность с isocalendar
заключается в том, что на самом деле это не значит считать день месяца. Поэтому вам нужно перевести назад, чтобы получить это. strptime
может помочь:
year, week, dow = datetime.today().isocalendar()
result = [datetime.strptime(str(year) + "-" + str(week-1) + "-" + str(x), "%Y-%W-%w").day for x in range(1,7)]
Что мы делаем здесь строит строку, striptime
может понять, начиная с неделю назад (для учета считая от 0 против 1) и, начиная с начала недели (понедельник , который равен 1
) и построение даты и времени для каждого дня в течение 7 дней.
Играя с week
между теми, два заявления (добавление или удаление недель, чтобы добраться до месяца перерывы) мы можем видеть, что это работает:
>>> year, week, dow = datetime.today().isocalendar()
>>> result = [datetime.strptime(str(year) + "-" + str(week-1) + "-" + str(x), "%Y-%W-%w").day for x in range(1,7)]
>>> result
[21, 22, 23, 24, 25, 26]
>>> year, week, dow = datetime.today().isocalendar()
>>> week = week + 1
>>> result = [datetime.strptime(str(year) + "-" + str(week-1) + "-" + str(x), "%Y-%W-%w").day for x in range(1,7)]
>>> result
[28, 29, 30, 1, 2, 3]
Теперь, чтобы решить две очень реальные проблемы, поднятые в комментариях мы придется изменить вещи немного:
year, week, dow = datetime.today().isocalendar()
week_start = datetime.strptime(str(year) + "-" + str(week-2) + "-0", "%Y-%W-%w")
result = [(week_start + timedelta(days=x)).day for x in range(0,7)]
Это использует timedelta
для увеличения. Чтобы сделать эту работу, мы должны выполнить резервное копирование в течение недели (следовательно, -2
вместо -1
). Тогда для понимания добавляет все большую разницу во время, как мы перебираем неделю:
>>> year, week, dow = datetime.today().isocalendar()
>>> week_start = datetime.strptime(str(year) + "-" + str(week-2) + "-0", "%Y-%W-%w")
>>> result = [(week_start + timedelta(days=x)).day for x in range(0,7)]
>>> result
[20, 21, 22, 23, 24, 25, 26]
>>> year, week, dow = datetime.today().isocalendar()
>>> week = week + 1
>>> week_start = datetime.strptime(str(year) + "-" + str(week-2) + "-0", "%Y-%W-%w")
>>> result = [(week_start + timedelta(days=x)).day for x in range(0,7)]
>>> result
[27, 28, 29, 30, 1, 2, 3]
Он возвращается 6 дней. Я знаю, что isocalendar рассматривает понедельник как 1, но я работаю с будним днем с даты и времени, которые рассматривают понедельник как 0. Как это подходит для работы с понедельника 0 и в воскресенье 6? – Gocht
Проверьте обновление! Посмотрите, относится ли это к вашей проблеме. –
Это довольно близкий чувак, я работаю с понедельником как 0 Я постараюсь получить список wirh с понедельника по воскресенье. Я вижу, что вы возвращаетесь с воскресенья по субботу. В ссылке, которую я предоставил [это] (http://www.timeanddate.com/calendar/index.html?country=18&year=), неделя подсчитывается от пн до солнца, в настоящее время на неделе 39, как и в моем ответе, является то, что возможно ? – Gocht