Skip to content

Instantly share code, notes, and snippets.

@rphlo
Last active February 19, 2022 16:12
Show Gist options
  • Select an option

  • Save rphlo/8dfe86774388f0224e67 to your computer and use it in GitHub Desktop.

Select an option

Save rphlo/8dfe86774388f0224e67 to your computer and use it in GitHub Desktop.
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