Last active
May 8, 2022 18:24
-
-
Save kadereub/980177704a99d719b34b30d6017ba225 to your computer and use it in GitHub Desktop.
A Python (pandas) holiday calendar for South Africa - for which there are many public holidays!
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# [1] https://github.com/pandas-dev/pandas/blob/main/pandas/tseries/holiday.py | |
from pandas.tseries.offsets import CDay, Day | |
from pandas.tseries.holiday import AbstractHolidayCalendar, Holiday, sunday_to_monday, \ | |
DateOffset, MO, next_monday, next_monday_or_tuesday, GoodFriday, EasterMonday | |
class Holidays_South_Africa(AbstractHolidayCalendar): | |
rules = [ | |
Holiday('New Years Day', month=1, day=1, observance=next_monday), | |
Holiday('Human Rights Day', month=3, day=21, observance=sunday_to_monday), | |
GoodFriday, EasterMonday, # Easter/Family Day | |
Holiday('Freedom Day', month=4, day=27, observance=sunday_to_monday), | |
Holiday('International Workers Day', month=5, day=2, observance=sunday_to_monday), | |
Holiday('Youth Day', month=6, day=16, observance=sunday_to_monday), | |
Holiday('National Womens Day', month=8, day=9, observance=sunday_to_monday), | |
Holiday('Heritage Day', month=9, day=24, observance=sunday_to_monday), | |
Holiday('Day of Reconciliation', month=12, day=16, observance=sunday_to_monday), | |
Holiday('Christmas Day', month=12, day=25, observance=sunday_to_monday), # not sure if next_monday? | |
Holiday('Boxing Day', month=12, day=26, observance=next_monday_or_tuesday) | |
] | |
if __name__ == "__main__": | |
from datetime import datetime | |
today = datetime.now() | |
sa_bday = CDay(calendar=Holidays_South_Africa()) | |
# go back one business day | |
print(f"Prev cob date: {today - sa_bday*1}") | |
print(f" Business date 20 days ago: {today - sa_bday*20}") | |
print(f"Business Days in April 2022: {pd.date_range(start='2022-04-01', end='2022-04-30', freq=sa_bday)}") | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
https://www.gov.za/about-sa/public-holidays#:~:text=**The%20Public%20Holidays%20Act,shall%20be%20a%20public%20holiday.