Velocity Reviews > weekdays in range

# weekdays in range

Guest
Posts: n/a

 10-18-2009
(Sorry if this shows up twice.)

Can someone think of an easy way to calculate the number of weekdays
between two calendar dates (in Python)?

Thankee.

Guest
Posts: n/a

 10-18-2009
Ben Finney wrote:
> Jive Dadson <(E-Mail Removed)> writes:
>
>> Can someone think of an easy way to calculate the number of weekdays
>> between two calendar dates (in Python)?

>
> That depends on what you mean by “weekdays”.
>
> >>> import datetime
> >>> begin_date = datetime.date(2009, 10, 9)
> >>> end_date = datetime.date(2009, 10, 22)
> >>> import calendar
> >>> print calendar.month(2009, 10)

> October 2009
> Mo Tu We Th Fr Sa Su
> 1 2 3 4
> 5 6 7 8 9 10 11
> 12 13 14 15 16 17 18
> 19 20 21 22 23 24 25
> 26 27 28 29 30 31
> >>> end_date - begin_date

> datetime.timedelta(13)
>
> If you're expecting to exclude Saturday and Sunday (i.e. if you expect
> the above result to be 9 days instead of 13), you can use other
> functions of the ‘calendar’ module; try starting with:
>
> >>> friday_weekday = 4
> >>> len([

> ... date for date in (
> ... begin_date + datetime.timedelta(days)
> ... for days in range((end_date - begin_date).days))
> ... if calendar.weekday(date.year, date.month, date.day) <= friday_weekday])
> 9
>

Thanks for your help. For a non-expert at Python, that last compound
statement is pretty inscrutable. I am trying to scrute it. Wish me luck.

Guest
Posts: n/a

 10-18-2009
Wow. It's a danged tutorial. Thanks again. Take a break.

Dave Angel
Guest
Posts: n/a

 10-18-2009
> <div class="moz-text-flowed" style="font-family: -moz-fixed">Wow.
> It's a danged tutorial. Thanks again. Take a break.
>
> </div>
>

Ben Finney's method is a very good approach, and an experienced Python
programmer would consider it straightforward.

But I have to ask whether the range of dates you might be considering
could be large. For example, if you want to know how many week-days
there are between a date in 1904 and 2207, it'd build a list of some 110
thousand items. There are other approaches which would be faster,
consume much less memory, and be much harder to read.

I'm not offering to debug it, but here's such an approach, subject to
the old plus/minus one bugs.

def epochweekdays (datetimeobj)
"""Given an arbitrary Monday long ago, figure out how many
weekdays have occurred between that day and the argument"""
subtract to get total_days
return int(totaldays/7) * 5 + max(totaldays%7, 5)

epochweekdays(b) - epochweekdays(a)

DaveA

Guest
Posts: n/a

 10-18-2009
I'm using weekdays as a proxy for days when the US stock market is open.
(I'll miss holidays.) The application is pricing CALL and PUT
options. Speed is not a problem. The number of days will typically be
between 1 and 254.