nse_workday

A library to calculate holidays, workdays and some other functions based on NSE trading holidays from 2010 - 2024.

It can be installed by:

pip install nse-workday

from nse_workday import *

get_new_holidays(mode='test')

Retrieves list of latest holidays from nse and save it if fetched list year > last available holidays year in library

Args::

mode = 'test' / 'normal' . Default 'test' (will not save data.). 
get_new_holidays(mode='normal')
No Dates to Exclude
Exceptional Trading Dates (Saturday/Sunday):: ['12-11-2023']
Holidays list :: ['26-01-2023', '07-03-2023', '30-03-2023', '04-04-2023', '07-04-2023', '14-04-2023', '01-05-2023', '29-06-2023', '15-08-2023', '19-09-2023', '02-10-2023', '24-10-2023', '14-11-2023', '27-11-2023', '25-12-2023']
Data already exists

update_holiday(dates_set = 'holidays')

Modify / Add / Remove a date from holidays or exceptions list ( Exception :: Trading days in Saturday/ Sunday)

Args::

dates_set : 'holidays' / 'exceptions' . Default 'holidays'    

The date should be entered in dd-mm-yyyy format.

update_holiday()
Select an option:
1. Modify a date 
2. Add a date 
3. Remove a date
Enter option number: 1
Enter old Date to remove (dd-mm-yyyy): 28-06-2023
Enter the new Date to add (dd-mm-yyyy): 29-06-2023
Do you want to save modified date list?  (Y/N): y
Data saved successfully

isHoliday(input_date)

Check the given date is holiday or not . Return Boolean.

Args::

input_date : date in %d-%m-%Y/ datetime.date / datetime.datetime format
isHoliday(input_date="29-06-2023")
True

All below functions returns datetime.datetime item / list.

workday(input_date, direction)

Will return the nearest workday in the given direction if the input_date is holiday. If not, will return the same

Args ::

input_date : date in %d-%m-%Y / datetime.date / datetime.datetime format    

direction : 'next' / 'prev'
workday(input_date="29-06-2023",direction='prev')
datetime.datetime(2023, 6, 28, 0, 0)

get_holidays_list(start_date, end_date)

Returns all holidays as a list within the given range

Args::

start_date : date in %d-%m-%Y / datetime.date / datetime.datetime format    

end_date : date in %d-%m-%Y / datetime.date / datetime.datetime format
get_holidays_list(start_date="20-6-2023", end_date="30-6-2023")
[datetime.datetime(2023, 6, 24, 0, 0),
 datetime.datetime(2023, 6, 25, 0, 0),
 datetime.datetime(2023, 6, 29, 0, 0)]

get_workdays_list(start_date, end_date)

Returns all workdays as a list within the given range

Args::

start_date : date in %d-%m-%Y / datetime.date / datetime.datetime format    

end_date : date in %d-%m-%Y / datetime.date / datetime.datetime format
get_workdays_list(start_date="20-6-2023", end_date="30-6-2023")
[datetime.datetime(2023, 6, 20, 0, 0),
 datetime.datetime(2023, 6, 21, 0, 0),
 datetime.datetime(2023, 6, 22, 0, 0),
 datetime.datetime(2023, 6, 23, 0, 0),
 datetime.datetime(2023, 6, 26, 0, 0),
 datetime.datetime(2023, 6, 27, 0, 0),
 datetime.datetime(2023, 6, 28, 0, 0),
 datetime.datetime(2023, 6, 30, 0, 0)]

get_month_weekdays(input_date, required_weekday, filtered=True)

Return all occurences of the required weekday from the given date month

Args::

input_date : date in %d-%m-%Y / datetime.date / datetime.datetime format    

required_weekday : Weekday name (eg. 'Sunday'/'sunday').    

filtered : bool . Default True ( Will return the previous work day if a required weekday is holiday.) 
get_month_weekdays(input_date="21-6-2023", required_weekday='thursday')
[datetime.datetime(2023, 6, 1, 0, 0),
 datetime.datetime(2023, 6, 8, 0, 0),
 datetime.datetime(2023, 6, 15, 0, 0),
 datetime.datetime(2023, 6, 22, 0, 0),
 datetime.datetime(2023, 6, 28, 0, 0)]

month_last_weekday(input_date, last_weekday, filtered=True)

Return last occurence of the required weekday from the given date month

Args::

input_date : date in %d-%m-%Y / datetime.date / datetime.datetime format    

last_weekday : Weekday name (eg. 'Sunday'/'sunday').    

filtered : bool . Default True (Will return the previous work day if a last weekday is holiday.) 
month_last_weekday(input_date="21-6-2023", last_weekday='thursday')
datetime.datetime(2023, 6, 28, 0, 0)

get_weekdays(start_date, end_date, required_weekday, filtered=True)

Return all occurences of the required weekday from the given range

Args::

start_date : date in %d-%m-%Y / datetime.date / datetime.datetime format    

end_date : date in %d-%m-%Y / datetime.date / datetime.datetime format    

required_weekday : Weekday name (eg. 'Sunday'/'sunday').    

filtered : bool . Default True ( Will return the previous work day if a required weekday is holiday.)
get_weekdays(start_date="21-3-2023", end_date="30-6-2023", required_weekday='friday')
[datetime.datetime(2023, 3, 24, 0, 0),
 datetime.datetime(2023, 3, 31, 0, 0),
 datetime.datetime(2023, 4, 6, 0, 0),
 datetime.datetime(2023, 4, 13, 0, 0),
 datetime.datetime(2023, 4, 21, 0, 0),
 datetime.datetime(2023, 4, 28, 0, 0),
 datetime.datetime(2023, 5, 5, 0, 0),
 datetime.datetime(2023, 5, 12, 0, 0),
 datetime.datetime(2023, 5, 19, 0, 0),
 datetime.datetime(2023, 5, 26, 0, 0),
 datetime.datetime(2023, 6, 2, 0, 0),
 datetime.datetime(2023, 6, 9, 0, 0),
 datetime.datetime(2023, 6, 16, 0, 0),
 datetime.datetime(2023, 6, 23, 0, 0),
 datetime.datetime(2023, 6, 30, 0, 0)]