debian-workalendar/workalendar/oceania/new_zealand.py

86 lines
3.0 KiB
Python

from datetime import date, timedelta
from ..core import WesternCalendar, MON, SAT, SUN
from ..registry_tools import iso_register
@iso_register("NZ")
class NewZealand(WesternCalendar):
"New Zealand"
include_good_friday = True
include_easter_monday = True
include_boxing_day = True
FIXED_HOLIDAYS = WesternCalendar.FIXED_HOLIDAYS + (
(1, 2, "Day after New Year's Day"),
(2, 6, "Waitangi Day"),
(4, 25, "ANZAC Day")
)
def get_queens_birthday(self, year):
return (
NewZealand.get_nth_weekday_in_month(year, 6, MON, 1),
"Queen's Birthday"
)
def get_labour_day(self, year):
return (
NewZealand.get_nth_weekday_in_month(year, 10, MON, 4),
"Labour Day"
)
def get_variable_days(self, year):
# usual variable days
days = super().get_variable_days(year)
days.append(self.get_queens_birthday(year))
days.append(self.get_labour_day(year))
waitangi_day = date(year, 2, 6)
if waitangi_day.weekday() in self.get_weekend_days():
days.append((
self.find_following_working_day(waitangi_day),
"Waitangi Day Shift")
)
anzac_day = date(year, 4, 25)
if anzac_day.weekday() in self.get_weekend_days():
days.append((
self.find_following_working_day(anzac_day),
"ANZAC Day Shift")
)
christmas = date(year, 12, 25)
boxing_day = date(year, 12, 26)
if christmas.weekday() is SAT:
shift = self.find_following_working_day(christmas)
days.append((shift, "Christmas Shift"))
elif christmas.weekday() is SUN:
shift = self.find_following_working_day(christmas)
days.append((shift + timedelta(days=1), "Christmas Shift"))
if boxing_day.weekday() is SAT:
shift = self.find_following_working_day(boxing_day)
days.append((shift, "Boxing Day Shift"))
elif boxing_day.weekday() is SUN:
shift = self.find_following_working_day(boxing_day)
days.append((shift + timedelta(days=1), "Boxing Day Shift"))
new_year = date(year, 1, 1)
day_after_new_year = date(year, 1, 2)
if new_year.weekday() is SAT:
shift = self.find_following_working_day(new_year)
days.append((shift, "New Year Shift"))
elif new_year.weekday() is SUN:
shift = self.find_following_working_day(new_year)
days.append((shift + timedelta(days=1), "New Year Shift"))
if day_after_new_year.weekday() is SAT:
shift = self.find_following_working_day(day_after_new_year)
days.append((shift, "Day after New Year's Day Shift"))
elif day_after_new_year.weekday() is SUN:
shift = self.find_following_working_day(day_after_new_year)
days.append((shift + timedelta(days=1),
"Day after New Year's Day Shift"))
return days