2013-09-18 4 views
0

Как я могу получить даты начала недели каждой недели в году, учитывая, что начальный день недели - понедельник в питоне?Как получить даты начала недели и номер недели каждой недели в году, учитывая, что начальный день недели - понедельник в питоне?

Это предполагает начать день воскресенье:

>>>import datetime as datetime 

>>>dt = datetime .date(2013,12,30) 
>>>dt.isocalendar()[1] 
1 

Однако результат не должен быть 1, потому 30-12-2013 еще в 2013 году

+0

Вы просматривали модуль Calendar? Там, вероятно, что-то есть, чтобы помочь вам найти то, что вам нужно. –

+0

Я сделал 'calendar.setfirstweekday (0)', чтобы установить первый день недели в понедельник, но результат не изменился. – alwbtc

+0

Фактически, согласно определению календаря ISO, результат '1' правильный. См. [Математика ISO-календаря] (http://www.staff.science.uu.nl/~gent0113/calendar/isocalendar.htm) – Rod

ответ

1

Я не думаю, что поведение isocalendar может быть изменено.

От: http://docs.python.org/2/library/datetime.html#datetime.date.isocalendar

Первая неделя в году ISO является первым (григорианский) календарь неделя года содержащей четверг.

Но STRFTIME может отображать номер недели:

% U «Все дни в новом году, предшествующий первому воскресенью, считаются относящимися к неделе 0.» % W «Все дни в новом году, предшествующем первому понедельнику, считаются неделями 0».

>>> import datetime 
>>> dt = datetime.date(2013,12,30) 
>>> dt.isocalendar() 
(2014, 1, 1) 
>>> dt.strftime("%U") 
'52' 

Но чтобы ответить на ваш первый вопрос, почему вы не просто использовать datetime.timedelta?

>>> import datetime 
>>> dt = datetime.date(2013,12,30) 
>>> w = datetime.timedelta(weeks=1) 
>>> dt - w 
datetime.date(2013, 12, 23) 
>>> dt + w 
datetime.date(2014, 1, 6) 
>>> dt + 10 * w 
datetime.date(2014, 3, 10) 
Смежные вопросы