2017-01-15 92 views
0

它爲什麼從12月開始?最後重複1 1。在特定年份的所有日子裏(處理閏年)迭代Pythonic的方式是什麼?故障日期

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