imsc
imsc

Reputation: 7840

Number of particular months/weekdays between two dates

How can I get the number of particular months and weekdays between two dates.

If the dates are

datetime.datetime(2004, 01, 01)
datetime.datetime(2005, 10, 01)

I want my output as

{'January':2, 'February':2, ..., 'December':1}
{'Monday':xx, ..., 'Sunday':xx}

Upvotes: 0

Views: 979

Answers (1)

eumiro
eumiro

Reputation: 212885

In Python 2.7:

from datetime import datetime
from dateutil import rrule
import itertools as it
from collections import Counter

rule = rrule.rrule(rrule.DAILY,
                   dtstart=datetime(2004, 01, 01),
                   until=datetime(2005, 10, 01))

dict(Counter(d.strftime('%A') for d in rule))
# {'Friday': 92,
#  'Monday': 91,
#  'Saturday': 92,
#  'Sunday': 91,
#  'Thursday': 92,
#  'Tuesday': 91,
#  'Wednesday': 91}

dict(Counter(k for k,v in it.groupby(d.strftime('%B') for d in rule)))
# or
dict(Counter(k for k,v in it.groupby(rule, key=lambda x: x.strftime('%B'))))

# {'April': 2,
#  'August': 2,
#  'December': 1,
#  'February': 2,
#  'January': 2,
#  'July': 2,
#  'June': 2,
#  'March': 2,
#  'May': 2,
#  'November': 1,
#  'October': 2,
#  'September': 2}

As @thg435 correctly commented, dateutil is not in standard Python library. It can be, however, replaced by the following command:

dtstart = datetime(2004, 01, 01)
until = datetime(2005, 10, 01)
rule = [dtstart + timedelta(i) for i in xrange((until - dtstart).days + 1)]

Upvotes: 5

Related Questions