-
-
Save lenamax2355/6ed83b35da527376ea7a852b44ad03a9 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