weekdays in range

Discussion in 'Python' started by Jive Dadson, Oct 18, 2009.

  1. Jive Dadson

    Jive Dadson Guest

    (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.
    Jive Dadson, Oct 18, 2009
    #1
    1. Advertising

  2. Jive Dadson

    Jive Dadson Guest

    Ben Finney wrote:
    > Jive Dadson <> 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.
    Jive Dadson, Oct 18, 2009
    #2
    1. Advertising

  3. Jive Dadson

    Jive Dadson Guest

    Wow. It's a danged tutorial. Thanks again. Take a break.
    Jive Dadson, Oct 18, 2009
    #3
  4. Jive Dadson

    Dave Angel Guest

    Jive Dadson wrote:
    > <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)

    Now, your answer is just
    epochweekdays(b) - epochweekdays(a)

    DaveA
    Dave Angel, Oct 18, 2009
    #4
  5. Jive Dadson

    Jive Dadson Guest

    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.
    Jive Dadson, Oct 18, 2009
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Replies:
    46
    Views:
    941
    Antoon Pardon
    Jul 25, 2006
  2. Mike

    calculate weekdays

    Mike, Jul 11, 2008, in forum: ASP .Net
    Replies:
    1
    Views:
    347
  3. Lambda
    Replies:
    2
    Views:
    380
    James Kanze
    Jul 16, 2008
  4. JP SIngh

    Calculate Weekdays in ASP

    JP SIngh, Jul 13, 2004, in forum: ASP General
    Replies:
    2
    Views:
    193
    Aaron [SQL Server MVP]
    Jul 13, 2004
  5. SimonC
    Replies:
    5
    Views:
    360
    Dr John Stockton
    Jan 27, 2005
Loading...

Share This Page