<pre><code>import calendar
import collections
from datetime import date
def get_weeks(year, month, holidays):
cal = calendar.Calendar(0)
weeks = collections.defaultdict(lambda: 0)
for i, week in enumerate(cal.monthdatescalendar(year, month)):
# Get just mon-fri
for day in week[:-2]:
if day.month == month and day not in holidays:
weeks['week%s' % (i+1)] += 1
return weeks
holidays = [date(2013, 8, 2), date(2013, 8, 6)]
print get_weeks(2013, 8, holidays)
</code></pre>
<p>这给了我:</p>
^{pr2}$
<p>如果我在8月29日再增加一个假期,我将得到:</p>
<pre><code>>>> holidays = [date(2013, 8, 2), date(2013, 8, 6), date(2013, 8, 29)]
>>> print get_weeks(2013, 8, holidays)
{'week2': 4, 'week1': 1, 'week4': 5, 'week3': 5, 'week5': 4})
</code></pre>
<p><em>更新:</em></p>
<pre><code>import calendar
import collections
from datetime import date
def get_weeks(year, month, holidays):
cal = calendar.Calendar(0)
weeks = collections.defaultdict(list)
for i, week in enumerate(cal.monthdatescalendar(year, month)):
# Get just mon-fri
for day in week[:-2]:
if day.month == month and day not in holidays:
weeks['week%s' % (i+1)].append(day)
return weeks
holidays = [date(2013, 8, 2), date(2013, 8, 6), date(2013, 8, 29)]
print get_weeks(2013, 8, holidays)
</code></pre>
<p>这给了我:</p>
<pre><code>{
'week1': [date(2013, 8, 1)],
'week2': [date(2013, 8, 5), date(2013, 8, 7), date(2013, 8, 8),
date(2013, 8, 9)],
'week3': [date(2013, 8, 12), date(2013, 8, 13), date(2013, 8, 14),
date(2013, 8, 15), date(2013, 8, 16)],
'week4': [date(2013, 8, 19), date(2013, 8, 20), date(2013, 8, 21),
date(2013, 8, 22), date(2013, 8, 23)],
'week5': [date(2013, 8, 26), date(2013, 8, 27), date(2013, 8, 28),
date(2013, 8, 30)]
</code></pre>
<p>}</p>