Using Python to count the number of business days in a month?

17,742

Solution 1

This is a long-winded way, but at least it works and doesn't require anything other than the standard modules.

import datetime

now = datetime.datetime.now()
holidays = {datetime.date(now.year, 8, 14)} # you can add more here
businessdays = 0
for i in range(1, 32):
    try:
        thisdate = datetime.date(now.year, now.month, i)
    except(ValueError):
        break
    if thisdate.weekday() < 5 and thisdate not in holidays: # Monday == 0, Sunday == 6 
        businessdays += 1

print businessdays

Solution 2

I would simply use built-in module calendar:

import calendar

weekday_count = 0
cal = calendar.Calendar()

for week in cal.monthdayscalendar(2013, 8):
    for i, day in enumerate(week):
        # not this month's day or a weekend
        if day == 0 or i >= 5:
            continue
        # or some other control if desired...
        weekday_count += 1

print weekday_count

that's it.

Solution 3

I would like to add my answer.

I'm using Calendar, list comprehension, and length to count how many days is the working day a particular month.

Here is my code:

#!/bin/env python

import calendar
import datetime

now = datetime.datetime.now()

cal = calendar.Calendar()

working_days = len([x for x in cal.itermonthdays2(now.year, now.month) if x[0] !=0 and x[1] < 5])

print "Total working days this month: " + str(working_days)

Solution 4

I stole this from Sharuzzaman's solution and added a dict for holidays and turned it into a function:

import calendar
cal = calendar.Calendar()

def get_wdim(year,month):
    working_days = len([x for x in cal.itermonthdays2(year, month) if x[0] !=0 and x[1] < 5]) 
    holidays = {
        1:1,
        2:1,
        4:1,
        5:1,
        7:1,
        9:1,
        10:1,
        11:4,
        12:1
    }
    return int(working_days) - holidays.get(month,0)


wdim2022 = [get_wdim(2022,x) for x in list(range(1,13)) ]   

Share:
17,742

Related videos on Youtube

Jacob Bridges
Author by

Jacob Bridges

About Me | My Blog | My Github I strive to be more productive and less busy. "The true sign of intelligence is not knowledge but imagination." -Albert Einstein

Updated on September 16, 2022

Comments

  • Jacob Bridges
    Jacob Bridges over 1 year

    I am trying to write a Python script that will calculate how many business days are in the current month. For instance if month = August then businessDays = 22.

    Here is my code for discovering the month:

    def numToMonth( num ):
       months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
       return str(months[ num - 1 ])
    

    This code works fine, and I could hard code another function to match the month with how many days that month should contain...but this does not help me with business days.

    Any help? I'm used to C, C++ so please don't bash my Python "skills".

    Edit: I cannot install any extra libraries or modules on my machine, so please post answers using default Python modules. (Python 2.7, datetime etc.) Also, my PC has Windows 7 OS.

  • Jacob Bridges
    Jacob Bridges over 10 years
    Thanks for encouraging me to do more research, but I was looking for a method already built in to Python. If it doesn't exist, I will post whatever algorithm I create as an answer.
  • Jacob Bridges
    Jacob Bridges over 10 years
    Thanks for your help! I had to modify the code a little.. (Your indentation was strange) But it works. Thanks again.
  • chthonicdaemon
    chthonicdaemon over 10 years
    No problem. In what way was my indentation strange? The code above only catches PEP8 errors for the long line and the comment style.
  • Jean-François Fabre
    Jean-François Fabre over 6 years
    looks like a hack but I would have done like that :) and it works. So thanks. Small remark: why hardcoding the year? to get a budget to ask your bosses to reopen the program in 2014 for heavy maintenance ? :)
  • chthonicdaemon
    chthonicdaemon over 6 years
    @Jean-FrançoisFabre In my country (South Africa) most holidays are not on exactly specified dates every year because the date they are observed changes to the following Monday if they fall on a weekend. So I would actually imagine you will have a yearly calendar for holidays which will be different every year. ;-)
  • joshlsullivan
    joshlsullivan almost 3 years
    Does calendar start with Monday and not Sunday?