Opa_omroep-automatiseren/venv/lib/python3.8/site-packages/holidays/countries/new_zealand.py
Eljakim Herrewijnen f26bbbf103 initial
2020-12-27 21:00:11 +01:00

225 lines
8.1 KiB
Python

# -*- coding: utf-8 -*-
# python-holidays
# ---------------
# A fast, efficient Python library for generating country, province and state
# specific sets of holidays on the fly. It aims to make determining whether a
# specific date is a holiday as fast and flexible as possible.
#
# Author: ryanss <ryanssdev@icloud.com> (c) 2014-2017
# dr-prodigy <maurizio.montel@gmail.com> (c) 2017-2020
# Website: https://github.com/dr-prodigy/python-holidays
# License: MIT (see LICENSE file)
from datetime import date
from dateutil.easter import easter
from dateutil.relativedelta import relativedelta as rd, MO, FR, WE, TU
from holidays.constants import JAN, FEB, MAR, APR, JUN, SEP, OCT, \
NOV, DEC
from holidays.constants import TUE, WED, THU, WEEKEND
from holidays.holiday_base import HolidayBase
class NewZealand(HolidayBase):
PROVINCES = ['NTL', 'AUK', 'TKI', 'HKB', 'WGN', 'MBH', 'NSN', 'CAN',
'STC', 'WTL', 'OTA', 'STL', 'CIT']
def __init__(self, **kwargs):
self.country = 'NZ'
HolidayBase.__init__(self, **kwargs)
def _populate(self, year):
# Bank Holidays Act 1873
# The Employment of Females Act 1873
# Factories Act 1894
# Industrial Conciliation and Arbitration Act 1894
# Labour Day Act 1899
# Anzac Day Act 1920, 1949, 1956
# New Zealand Day Act 1973
# Waitangi Day Act 1960, 1976
# Sovereign's Birthday Observance Act 1937, 1952
# Holidays Act 1981, 2003
if year < 1894:
return
# New Year's Day
name = "New Year's Day"
jan1 = date(year, JAN, 1)
self[jan1] = name
if self.observed and jan1.weekday() in WEEKEND:
self[date(year, JAN, 3)] = name + " (Observed)"
name = "Day after New Year's Day"
jan2 = date(year, JAN, 2)
self[jan2] = name
if self.observed and jan2.weekday() in WEEKEND:
self[date(year, JAN, 4)] = name + " (Observed)"
# Waitangi Day
if year > 1973:
name = "New Zealand Day"
if year > 1976:
name = "Waitangi Day"
feb6 = date(year, FEB, 6)
self[feb6] = name
if self.observed and year >= 2014 and feb6.weekday() in WEEKEND:
self[feb6 + rd(weekday=MO)] = name + " (Observed)"
# Easter
self[easter(year) + rd(weekday=FR(-1))] = "Good Friday"
self[easter(year) + rd(weekday=MO)] = "Easter Monday"
# Anzac Day
if year > 1920:
name = "Anzac Day"
apr25 = date(year, APR, 25)
self[apr25] = name
if self.observed and year >= 2014 and apr25.weekday() in WEEKEND:
self[apr25 + rd(weekday=MO)] = name + " (Observed)"
# Sovereign's Birthday
if year >= 1952:
name = "Queen's Birthday"
elif year > 1901:
name = "King's Birthday"
if year == 1952:
self[date(year, JUN, 2)] = name # Elizabeth II
elif year > 1937:
self[date(year, JUN, 1) + rd(weekday=MO(+1))] = name # EII & GVI
elif year == 1937:
self[date(year, JUN, 9)] = name # George VI
elif year == 1936:
self[date(year, JUN, 23)] = name # Edward VIII
elif year > 1911:
self[date(year, JUN, 3)] = name # George V
elif year > 1901:
# http://paperspast.natlib.govt.nz/cgi-bin/paperspast?a=d&d=NZH19091110.2.67
self[date(year, NOV, 9)] = name # Edward VII
# Labour Day
name = "Labour Day"
if year >= 1910:
self[date(year, OCT, 1) + rd(weekday=MO(+4))] = name
elif year > 1899:
self[date(year, OCT, 1) + rd(weekday=WE(+2))] = name
# Christmas Day
name = "Christmas Day"
dec25 = date(year, DEC, 25)
self[dec25] = name
if self.observed and dec25.weekday() in WEEKEND:
self[date(year, DEC, 27)] = name + " (Observed)"
# Boxing Day
name = "Boxing Day"
dec26 = date(year, DEC, 26)
self[dec26] = name
if self.observed and dec26.weekday() in WEEKEND:
self[date(year, DEC, 28)] = name + " (Observed)"
# Province Anniversary Day
if self.prov in ('NTL', 'Northland', 'AUK', 'Auckland'):
if 1963 < year <= 1973 and self.prov in ('NTL', 'Northland'):
name = "Waitangi Day"
dt = date(year, FEB, 6)
else:
name = "Auckland Anniversary Day"
dt = date(year, JAN, 29)
if dt.weekday() in (TUE, WED, THU):
self[dt + rd(weekday=MO(-1))] = name
else:
self[dt + rd(weekday=MO)] = name
elif self.prov in ('TKI', 'Taranaki', 'New Plymouth'):
name = "Taranaki Anniversary Day"
self[date(year, MAR, 1) + rd(weekday=MO(+2))] = name
elif self.prov in ('HKB', "Hawke's Bay"):
name = "Hawke's Bay Anniversary Day"
labour_day = date(year, OCT, 1) + rd(weekday=MO(+4))
self[labour_day + rd(weekday=FR(-1))] = name
elif self.prov in ('WGN', 'Wellington'):
name = "Wellington Anniversary Day"
jan22 = date(year, JAN, 22)
if jan22.weekday() in (TUE, WED, THU):
self[jan22 + rd(weekday=MO(-1))] = name
else:
self[jan22 + rd(weekday=MO)] = name
elif self.prov in ('MBH', 'Marlborough'):
name = "Marlborough Anniversary Day"
labour_day = date(year, OCT, 1) + rd(weekday=MO(+4))
self[labour_day + rd(weeks=1)] = name
elif self.prov in ('NSN', 'Nelson'):
name = "Nelson Anniversary Day"
feb1 = date(year, FEB, 1)
if feb1.weekday() in (TUE, WED, THU):
self[feb1 + rd(weekday=MO(-1))] = name
else:
self[feb1 + rd(weekday=MO)] = name
elif self.prov in ('CAN', 'Canterbury'):
name = "Canterbury Anniversary Day"
showday = date(year, NOV, 1) + rd(weekday=TU) + \
rd(weekday=FR(+2))
self[showday] = name
elif self.prov in ('STC', 'South Canterbury'):
name = "South Canterbury Anniversary Day"
dominion_day = date(year, SEP, 1) + rd(weekday=MO(4))
self[dominion_day] = name
elif self.prov in ('WTL', 'Westland'):
name = "Westland Anniversary Day"
dec1 = date(year, DEC, 1)
# Observance varies?!?!
if year == 2005: # special case?!?!
self[date(year, DEC, 5)] = name
elif dec1.weekday() in (TUE, WED, THU):
self[dec1 + rd(weekday=MO(-1))] = name
else:
self[dec1 + rd(weekday=MO)] = name
elif self.prov in ('OTA', 'Otago'):
name = "Otago Anniversary Day"
mar23 = date(year, MAR, 23)
# there is no easily determined single day of local observance?!?!
if mar23.weekday() in (TUE, WED, THU):
dt = mar23 + rd(weekday=MO(-1))
else:
dt = mar23 + rd(weekday=MO)
if dt == easter(year) + rd(weekday=MO): # Avoid Easter Monday
dt += rd(days=1)
self[dt] = name
elif self.prov in ('STL', 'Southland'):
name = "Southland Anniversary Day"
jan17 = date(year, JAN, 17)
if year > 2011:
self[easter(year) + rd(weekday=TU)] = name
else:
if jan17.weekday() in (TUE, WED, THU):
self[jan17 + rd(weekday=MO(-1))] = name
else:
self[jan17 + rd(weekday=MO)] = name
elif self.prov in ('CIT', 'Chatham Islands'):
name = "Chatham Islands Anniversary Day"
nov30 = date(year, NOV, 30)
if nov30.weekday() in (TUE, WED, THU):
self[nov30 + rd(weekday=MO(-1))] = name
else:
self[nov30 + rd(weekday=MO)] = name
class NZ(NewZealand):
pass
class NZL(NewZealand):
pass