2017-01-15 5 views
0

Почему начинается с декабря? И 1 1 повторяет в конце. Чем больше питоновский способ итерации в течение всех дней в данном году (с обработкой високосного года)?Сроки подачи заявок

import calendar 

a = calendar.Calendar(0) 
for b in range(1,13): 
    for x in a.itermonthdates(2016,b): 
     print x.month, x.day 

Выходные:

12 28 
12 29 
12 30 
12 31 
1 1 
1 2 
1 3 
.. 
.. 
.. 

Полный Выход:

http://pastebin.com/nnP4ADQK

ответ

2

itermonthdates возвращает полные недели:

itermonthdates (год, месяц) Возвратите итератор за месяц месяц (1-12) в году. Этот итератор будет возвращать все дни (как объекты datetime.date) за месяц и за все дни до начала месяца или после окончания месяца, которые необходимы для получения полной недели.

Вы можете просто отказаться от даты, когда год не 2016:

import calendar 

a = calendar.Calendar(0) 
g = (x for b in xrange(1, 13) for x in a.itermonthdates(2016, b) if x.year == 2016) 
print next(g) 

Выход:

2016-01-01 
0

itermonthdates возвращает все недели, которые включают в себя дни месяца. Поэтому проверка должна проводиться на все месяцы.

import calendar 
a = calendar.Calendar(0) 
for b in range(1,13): 
    for x in a.itermonthdates(2017,b): 
     if x.month==b: 
      print x #x.month, x.day 
Смежные вопросы