Last active
February 19, 2022 16:12
-
-
Save rphlo/8dfe86774388f0224e67 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
| import datetime | |
| def get_easter_for_year(year): | |
| a = year % 19 | |
| b, c = divmod(year, 100) | |
| d, e = divmod(b, 4) | |
| g = (8 * b +13)//25 | |
| h = (19 * a + b - d - g + 15)% 30 | |
| j, k = divmod(c, 4) | |
| m = (a + 11 * h)/ 319 | |
| r = (2 * e + 2 * j - k - h + m + 32 ) % 7 | |
| month = int((h - m + r + 90)//25) | |
| day = int((h - m + r + month + 19) % 32) | |
| return datetime.date(year=year, month=month, day=day) | |
| def get_midsummer_for_year(year): | |
| date = datetime.date(year=year, month=6, day=20) | |
| date += datetime.timedelta(days=(7+6-date.isoweekday()) % 7) | |
| return date | |
| def get_all_saints_for_year(year): | |
| date = datetime.date(year=year, month=10, day=31) | |
| date += datetime.timedelta(days=(7+6-date.isoweekday()) % 7) | |
| return date | |
| def get_first_sunday_for_year(year): | |
| date = datetime.date(year=year, month=1, day=1) | |
| date += datetime.timedelta(days=(7-date.isoweekday())) | |
| return date | |
| def get_all_sundays_for_year(year): | |
| result = [] | |
| date = get_first_sunday_for_year(year) | |
| while date.year == year: | |
| result.append(date) | |
| date += datetime.timedelta(days=7) | |
| return result | |
| def get_first_saturday_for_year(year): | |
| date = datetime.date(year=year, month=1, day=1) | |
| date += datetime.timedelta(days=(7+6-date.isoweekday()) % 7) | |
| return date | |
| def get_all_saturdays_for_year(year): | |
| result = [] | |
| date = get_first_saturday_for_year(year) | |
| while date.year == year: | |
| result.append(date) | |
| date += datetime.timedelta(days=7) | |
| return result | |
| def get_holidays(year, include_saturdays=False): | |
| new_year_day = datetime.date(year=year, month=1, day=1) | |
| epiphany = datetime.date(year=year, month=1, day=6) | |
| easter_sun = get_easter_for_year(year) | |
| easter_fri = easter_sun - datetime.timedelta(days=2) | |
| easter_mon = easter_sun + datetime.timedelta(days=1) | |
| vappu = datetime.date(year=year, month=5, day=1) | |
| ascension = easter_sun + datetime.timedelta(days=39) | |
| pentecost = easter_sun + datetime.timedelta(days=49) | |
| midsummer = get_midsummer_for_year(year) | |
| midsummer_eve = midsummer - datetime.timedelta(days=1) | |
| all_saints = get_all_saints_for_year(year) | |
| independance = datetime.date(year=year, month=12, day=6) | |
| christmas_eve = datetime.date(year=year, month=12, day=24) | |
| christmas = datetime.date(year=year, month=12, day=25) | |
| stephen_day = datetime.date(year=year, month=12, day=26) | |
| sundays = get_all_sundays_for_year(year) | |
| saturdays = get_all_saturdays_for_year(year) | |
| holidays = [new_year_day, epiphany, easter_fri, easter_sun, easter_mon, | |
| vappu, ascension, pentecost, midsummer_eve, midsummer, | |
| all_saints, independance, christmas_eve, christmas, | |
| stephen_day] | |
| holidays.extend(sundays) | |
| if include_saturdays: | |
| holidays.extend(saturdays) | |
| return sorted(list(set(holidays))) | |
| def is_holiday(date, include_saturdays=False): | |
| return date in get_holidays(date.year, include_saturdays) | |
| if __name__ == '__main__': | |
| today = datetime.date.today() | |
| print("Is today an Holiday? {}.".format( | |
| "Yes" if is_holiday(today, include_saturdays=True) else "No")) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment