Last active
May 30, 2022 14:16
-
-
Save w-A-L-L-e/6792735b01f2320c4bcedd3141c13a28 to your computer and use it in GitHub Desktop.
Feestdagen België en Nederland in python
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
from datetime import datetime, date, timedelta, timezone | |
EASTER_JULIAN = 1 | |
EASTER_ORTHODOX = 2 | |
EASTER_WESTERN = 3 | |
def easter(year, method=EASTER_WESTERN): | |
if not (1 <= method <= 3): | |
raise ValueError("invalid method") | |
y = year | |
g = y % 19 | |
e = 0 | |
if method < 3: | |
# Old method | |
i = (19*g + 15) % 30 | |
j = (y + y//4 + i) % 7 | |
if method == 2: | |
# Extra dates to convert Julian to Gregorian date | |
e = 10 | |
if y > 1600: | |
e = e + y//100 - 16 - (y//100 - 16)//4 | |
else: | |
# New method | |
c = y//100 | |
h = (c - c//4 - (8*c + 13)//25 + 19*g + 15) % 30 | |
i = h - (h//28)*(1 - (h//28)*(29//(h + 1))*((21 - g)//11)) | |
j = (y + y//4 + i + 2 - c + c//4) % 7 | |
# p can be from -6 to 56 corresponding to dates 22 March to 23 May | |
# (later dates apply to method 2, although 23 May never actually occurs) | |
p = i - j + e | |
d = 1 + (p + 27 + (p + 6)//40) % 31 | |
m = 3 + (p + 26)//30 | |
return date(int(y), int(m), int(d)) | |
def belgische_feestdagen(jaar): | |
pasen = easter(jaar) | |
feest_dagen = {} | |
feest_dagen[ date(jaar,1,1) ] = 'Nieuwjaar' | |
feest_dagen[ pasen ] = 'Pasen' | |
feest_dagen[ pasen + timedelta(days=1)] = 'Paasmaandag' | |
feest_dagen[ date(jaar,5,1) ] = 'Feest van de arbeid' | |
feest_dagen[ pasen + timedelta(days=39)] = 'O.L.H. Hemelvaart' | |
feest_dagen[ pasen + timedelta(days=49)] = 'Pinksteren' | |
feest_dagen[ pasen + timedelta(days=50)] = 'Pinkstermaandag' | |
feest_dagen[ date(jaar,7,21) ] = 'Nationale feestdag' | |
feest_dagen[ date(jaar,11,1) ] = 'Allerheiligen' | |
feest_dagen[ date(jaar,11,11) ] = 'Wapenstilstand' | |
feest_dagen[ date(jaar,12,25) ] = 'Kerstmis' | |
return feest_dagen | |
def nederlandse_feestdagen(jaar): | |
pasen = easter(jaar) | |
feest_dagen = {} | |
feest_dagen[ date(jaar,1,1) ] = 'Nieuwjaar' | |
feest_dagen[ pasen - timedelta(days=2)] = 'Goede vrijdag' | |
feest_dagen[ pasen ] = 'Pasen' | |
feest_dagen[ pasen + timedelta(days=1)] = 'Paasmaandag' | |
koningsdag = date(jaar, 4, 27) | |
# als koningsdag op zondag, 1 dag ervoor | |
if koningsdag.weekday() == 6: | |
koningsdag -= timedelta(days=1) | |
feest_dagen[koningsdag] = 'Koningsdag' | |
feest_dagen[ date(jaar,5,5) ] = 'Bevrijdingsdag' | |
feest_dagen[ pasen + timedelta(days=39)] = 'O.L.H. Hemelvaart' | |
feest_dagen[ pasen + timedelta(days=49)] = 'Pinksteren' | |
feest_dagen[ pasen + timedelta(days=50)] = 'Pinkstermaandag' | |
feest_dagen[ date(jaar,12,25) ] = 'Kerstmis' | |
feest_dagen[ date(jaar,12,26) ] = 'Tweede kerstdag' | |
return feest_dagen | |
def print_feestdagen(year): | |
print("Belgische feestdagen") | |
print("====================") | |
feest_dagen = belgische_feestdagen(year) | |
for dag in feest_dagen: | |
print('{:<20}: {}'.format(feest_dagen[dag], dag.isoformat())) | |
print("\nNederlandse feestdagen") | |
print("======================") | |
feest_dagen = nederlandse_feestdagen(year) | |
for dag in feest_dagen: | |
print('{:<20}: {}'.format(feest_dagen[dag], dag.isoformat())) | |
def main(): | |
today = datetime.now() | |
print_feestdagen(today.year) | |
if __name__ == '__main__': | |
main() |
Author
w-A-L-L-e
commented
May 30, 2022
•
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment