1011 lines
36 KiB
Python
1011 lines
36 KiB
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.
|
|
#
|
|
# Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file)
|
|
# dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
|
|
# ryanss <ryanssdev@icloud.com> (c) 2014-2017
|
|
# Website: https://github.com/vacanza/holidays
|
|
# License: MIT (see LICENSE file)
|
|
|
|
from gettext import gettext as tr
|
|
|
|
from holidays.calendars.gregorian import JAN, APR, JUN, AUG, SEP, OCT, DEC
|
|
from holidays.constants import BANK, HALF_DAY, PUBLIC
|
|
from holidays.groups import ChristianHolidays, InternationalHolidays, StaticHolidays
|
|
from holidays.observed_holiday_base import (
|
|
ObservedHolidayBase,
|
|
MON_TO_NEXT_TUE,
|
|
SUN_TO_NEXT_MON,
|
|
SUN_TO_NEXT_TUE,
|
|
SAT_SUN_TO_NEXT_MON,
|
|
SAT_SUN_TO_NEXT_MON_TUE,
|
|
)
|
|
|
|
|
|
class Australia(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, StaticHolidays):
|
|
"""Australia holidays.
|
|
|
|
References:
|
|
* <https://web.archive.org/web/20250414072303/https://www.qld.gov.au/recreation/travel/holidays>
|
|
* [ACT Holidays Act 1958](https://web.archive.org/web/20250322061953/https://www.legislation.act.gov.au/a/1958-19/)
|
|
* [ACT 2013-2023](https://web.archive.org/web/20240401072340/https://www.cmtedd.act.gov.au/archived-content/holidays/previous-years)
|
|
* [NSW Banks and Bank Holidays Act 1912](https://web.archive.org/web/20241107225523/https://legislation.nsw.gov.au/view/html/repealed/current/act-1912-043)
|
|
* [NSW Public Holidays Act 2010](https://web.archive.org/web/20250316173922/https://legislation.nsw.gov.au/view/html/inforce/current/act-2010-115)
|
|
* [NT Public Holidays Act 1981](https://web.archive.org/web/20250315072128/https://legislation.nt.gov.au/api/sitecore/Act/PDF?id=12145)
|
|
* [QLD Holidays Act 1983](https://web.archive.org/web/20250404230918/https://www.legislation.qld.gov.au/view/html/inforce/current/act-1983-018)
|
|
* [QLD 2013-2028](https://web.archive.org/web/20150703042947/http://www.qld.gov.au/recreation/travel/holidays/public/)
|
|
* [SA Holidays Act 1910](https://web.archive.org/web/20250420203417/https://www.legislation.sa.gov.au/LZ/C/A/HOLIDAYS%20ACT%201910.aspx)
|
|
* [SA Public Holidays Act 2023](https://web.archive.org/web/20250429092113/https://www.legislation.sa.gov.au/lz?path=/C/A/Public%20Holidays%20Act%202023)
|
|
* [SA 2023-2024](https://web.archive.org/web/20250404084235/https://www.safework.sa.gov.au/resources/public-holidays)
|
|
* [SA 2007-2021](https://web.archive.org/web/20240610084716/https://www.safework.sa.gov.au/__data/assets/pdf_file/0007/235474/Public-Holidays-since-2007.pdf)
|
|
* [TAS Statutory Holidays Act 2000](https://web.archive.org/web/20250423095807/https://www.legislation.tas.gov.au/view/html/inforce/current/act-2000-096)
|
|
* [VIC Public Holidays Act 1993](https://web.archive.org/web/20250212090816/https://www.legislation.vic.gov.au/in-force/acts/public-holidays-act-1993/027)
|
|
* [VIC Minister appointment](https://web.archive.org/web/20240328142238/https://www.gazette.vic.gov.au/gazette/Gazettes2015/GG2015S229.pdf)
|
|
* [VIC 2018-2024](https://web.archive.org/web/20250422235530/https://business.vic.gov.au/business-information/public-holidays)
|
|
* [WA Public and Bank Holidays Act 1972](https://web.archive.org/web/20241106220940/https://www.legislation.wa.gov.au/legislation/statutes.nsf/law_a639.html)
|
|
* [WA 2019-2023](https://web.archive.org/web/20240805123535/https://www.commerce.wa.gov.au/labour-relations/previous-years-public-holiday-dates)
|
|
"""
|
|
|
|
country = "AU"
|
|
default_language = "en_AU"
|
|
# %s (observed).
|
|
observed_label = tr("%s (observed)")
|
|
start_year = 1801
|
|
# fmt: off
|
|
subdivisions = (
|
|
"ACT", # Australian Capital Territory.
|
|
"NSW", # New South Wales.
|
|
"NT", # Northern Territory.
|
|
"QLD", # Queensland.
|
|
"SA", # South Australia.
|
|
"TAS", # Tasmania.
|
|
"VIC", # Victoria.
|
|
"WA", # Western Australia.
|
|
)
|
|
# fmt: on
|
|
subdivisions_aliases = {
|
|
"Australian Capital Territory": "ACT",
|
|
"New South Wales": "NSW",
|
|
"Northern Territory": "NT",
|
|
"Queensland": "QLD",
|
|
"South Australia": "SA",
|
|
"Tasmania": "TAS",
|
|
"Victoria": "VIC",
|
|
"Western Australia": "WA",
|
|
}
|
|
supported_categories = (BANK, HALF_DAY, PUBLIC)
|
|
supported_languages = ("en_AU", "en_US", "th")
|
|
|
|
@property
|
|
def sovereign_birthday(self) -> str:
|
|
"""Sovereign's birthday holiday name."""
|
|
return (
|
|
# King's Birthday.
|
|
tr("King's Birthday")
|
|
if 1902 <= self._year <= 1951 or self._year >= 2023
|
|
# Queen's Birthday.
|
|
else tr("Queen's Birthday")
|
|
)
|
|
|
|
@property
|
|
def australia_day(self) -> str:
|
|
"""Australia Day holiday name."""
|
|
return (
|
|
# Australia Day.
|
|
tr("Australia Day")
|
|
if self._year >= 1935
|
|
# Anniversary Day.
|
|
else tr("Anniversary Day")
|
|
)
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
ChristianHolidays.__init__(self)
|
|
InternationalHolidays.__init__(self)
|
|
StaticHolidays.__init__(self, AustraliaStaticHolidays)
|
|
kwargs.setdefault("observed_rule", SAT_SUN_TO_NEXT_MON)
|
|
super().__init__(*args, **kwargs)
|
|
|
|
def _populate_public_holidays(self):
|
|
# Good Friday.
|
|
self._add_good_friday(tr("Good Friday"))
|
|
|
|
# Easter Monday.
|
|
self._add_easter_monday(tr("Easter Monday"))
|
|
|
|
# Sovereign's Birthday.
|
|
if 1902 <= self._year <= 1935:
|
|
if self._year >= 1912:
|
|
self._add_holiday_jun_3(self.sovereign_birthday) # George V
|
|
else:
|
|
self._add_holiday_nov_9(self.sovereign_birthday) # Edward VII
|
|
|
|
if self.subdiv:
|
|
return None
|
|
|
|
# Common holidays.
|
|
|
|
# New Year's Day.
|
|
self._add_new_years_day(tr("New Year's Day"))
|
|
|
|
# Australia Day.
|
|
if self._year >= 1935:
|
|
self._add_holiday_jan_26(self.australia_day)
|
|
|
|
if self._year >= 1921:
|
|
# ANZAC Day.
|
|
self._add_anzac_day(tr("ANZAC Day"))
|
|
|
|
# Christmas Day.
|
|
self._add_christmas_day(tr("Christmas Day"))
|
|
|
|
# Boxing Day.
|
|
self._add_christmas_day_two(tr("Boxing Day"))
|
|
|
|
def _populate_subdiv_act_public_holidays(self):
|
|
# New Year's Day.
|
|
# 1959-1992: SUN - move to MON.
|
|
# 1993-2014: SAT, SUN - move to MON.
|
|
# from 2015: SAT, SUN - add MON.
|
|
|
|
# New Year's Day.
|
|
name = tr("New Year's Day")
|
|
if self._year >= 2015:
|
|
self._add_observed(self._add_new_years_day(name))
|
|
elif self._year >= 1959:
|
|
jan_1 = (JAN, 1)
|
|
if self._is_sunday(jan_1) or (self._year >= 1993 and self._is_saturday(jan_1)):
|
|
self._add_holiday_1st_mon_from_jan_1(name)
|
|
else:
|
|
self._add_new_years_day(name)
|
|
else:
|
|
self._add_new_years_day(name)
|
|
|
|
# Australia Day.
|
|
# 1959-1989: not MON - move to MON.
|
|
# from 1990: SAT, SUN - move to MON.
|
|
|
|
# Australia Day.
|
|
if self._year >= 1888:
|
|
if 1959 <= self._year <= 1989 or (self._year >= 1990 and self._is_weekend(JAN, 26)):
|
|
self._add_holiday_1st_mon_from_jan_26(self.australia_day)
|
|
else:
|
|
self._add_holiday_jan_26(self.australia_day)
|
|
|
|
if self._year >= 1913:
|
|
# Canberra Day.
|
|
name = tr("Canberra Day")
|
|
if self._year <= 1958 or self._year == 2012:
|
|
self._add_holiday_mar_12(name)
|
|
elif self._year <= 2007:
|
|
self._add_holiday_3rd_mon_of_mar(name)
|
|
else:
|
|
self._add_holiday_2nd_mon_of_mar(name)
|
|
|
|
# Easter Saturday.
|
|
self._add_holy_saturday(tr("Easter Saturday"))
|
|
|
|
if self._year >= 2016:
|
|
# Easter Sunday.
|
|
self._add_easter_sunday(tr("Easter Sunday"))
|
|
|
|
# ANZAC Day.
|
|
# from 1959: SUN - move to MON.
|
|
|
|
if self._year >= 1921:
|
|
# ANZAC Day.
|
|
name = tr("ANZAC Day")
|
|
if self._year >= 1959 and self._is_sunday(APR, 25):
|
|
self._add_holiday_1st_mon_from_apr_25(name)
|
|
else:
|
|
self._add_anzac_day(name)
|
|
|
|
if self._year >= 2018:
|
|
# Reconciliation Day.
|
|
self._add_holiday_1st_mon_from_may_27(tr("Reconciliation Day"))
|
|
|
|
# Sovereign's Birthday.
|
|
if self._year >= 1936:
|
|
self._add_holiday_2nd_mon_of_jun(self.sovereign_birthday)
|
|
|
|
# Family & Community Day.
|
|
# (First Monday of the September/October school holidays;
|
|
# moved to the second Monday if this falls on Labour day).
|
|
|
|
if 2010 <= self._year <= 2017:
|
|
fc_dates = {
|
|
2010: (SEP, 26),
|
|
2011: (OCT, 10),
|
|
2012: (OCT, 8),
|
|
2013: (SEP, 30),
|
|
2014: (SEP, 29),
|
|
2015: (SEP, 28),
|
|
2016: (SEP, 26),
|
|
2017: (SEP, 25),
|
|
}
|
|
# Family & Community Day.
|
|
self._add_holiday(tr("Family & Community Day"), fc_dates[self._year])
|
|
|
|
# Labor Day.
|
|
self._add_holiday_1st_mon_of_oct(tr("Labour Day"))
|
|
|
|
# Christmas Day.
|
|
# 1958-1991: SUN - to MON.
|
|
# 1992-2013: SAT, SUN - to MON.
|
|
# from 2014: SAT - add MON, SUN - add TUE.
|
|
|
|
# Christmas Day.
|
|
name = tr("Christmas Day")
|
|
if self._year >= 2014:
|
|
self._add_observed(self._add_christmas_day(name), rule=SAT_SUN_TO_NEXT_MON_TUE)
|
|
elif self._year >= 1958:
|
|
dec_25 = (DEC, 25)
|
|
if self._is_sunday(dec_25) or (self._year >= 1992 and self._is_saturday(dec_25)):
|
|
self._add_holiday_1st_mon_from_dec_25(name)
|
|
else:
|
|
self._add_christmas_day(name)
|
|
else:
|
|
self._add_christmas_day(name)
|
|
|
|
# Boxing Day.
|
|
# 1958-1991: SUN - to MON, MON - to TUE.
|
|
# 1992-2013: SAT - to MON, SUN - to TUE, MON - to TUE.
|
|
# from 2014: SAT - add MON, SUN - add TUE.
|
|
|
|
# Boxing Day.
|
|
name = tr("Boxing Day")
|
|
if self._year >= 2014:
|
|
self._add_observed(self._add_christmas_day_two(name), rule=SAT_SUN_TO_NEXT_MON_TUE)
|
|
elif self._year >= 1958:
|
|
dec_26 = (DEC, 26)
|
|
if self._year >= 1992:
|
|
if self._is_saturday(dec_26):
|
|
self._add_holiday_1st_mon_from_dec_26(name)
|
|
elif self._is_sunday(dec_26) or self._is_monday(dec_26):
|
|
self._add_holiday_1st_tue_from_dec_26(name)
|
|
else:
|
|
self._add_christmas_day_two(name)
|
|
else:
|
|
if self._is_sunday(dec_26):
|
|
self._add_holiday_1st_mon_from_dec_26(name)
|
|
elif self._is_monday(dec_26):
|
|
self._add_holiday_1st_tue_from_dec_26(name)
|
|
else:
|
|
self._add_christmas_day_two(name)
|
|
else:
|
|
self._add_christmas_day_two(name)
|
|
|
|
def _populate_subdiv_act_bank_holidays(self):
|
|
# Bank Holiday.
|
|
self._add_holiday_1st_mon_of_aug(tr("Bank Holiday"))
|
|
|
|
def _populate_subdiv_nsw_public_holidays(self):
|
|
# New Year's Day.
|
|
# 1912-2010: SUN - add MON.
|
|
# from 2011: SAT, SUN - add MON.
|
|
|
|
self._add_observed(
|
|
# New Year's Day.
|
|
self._add_new_years_day(tr("New Year's Day")),
|
|
rule=SAT_SUN_TO_NEXT_MON if self._year >= 2011 else SUN_TO_NEXT_MON,
|
|
)
|
|
|
|
# Australia Day.
|
|
# 1912-2010: SUN - add MON.
|
|
# from 2011: SAT, SUN - to MON.
|
|
|
|
if self._year >= 1888:
|
|
name = (
|
|
# Australia Day.
|
|
tr("Australia Day")
|
|
if self._year >= 1946
|
|
# Anniversary Day.
|
|
else tr("Anniversary Day")
|
|
)
|
|
if self._year >= 2011:
|
|
if self._is_weekend(JAN, 26):
|
|
self._add_holiday_1st_mon_from_jan_26(name)
|
|
else:
|
|
self._add_holiday_jan_26(name)
|
|
else:
|
|
self._add_observed(self._add_holiday_jan_26(name), rule=SUN_TO_NEXT_MON)
|
|
|
|
# Easter Saturday.
|
|
self._add_holy_saturday(tr("Easter Saturday"))
|
|
|
|
if self._year >= 2011:
|
|
# Easter Sunday.
|
|
self._add_easter_sunday(tr("Easter Sunday"))
|
|
|
|
# ANZAC Day.
|
|
# 1912-2010: SUN - add MON.
|
|
# from 2011: normal.
|
|
|
|
if self._year >= 1921:
|
|
# ANZAC Day.
|
|
apr_25 = self._add_anzac_day(tr("ANZAC Day"))
|
|
if self._year <= 2010:
|
|
self._add_observed(apr_25)
|
|
|
|
# Labor Day.
|
|
self._add_holiday_1st_mon_of_oct(tr("Labour Day"))
|
|
|
|
# Sovereign's Birthday.
|
|
if self._year >= 1936:
|
|
self._add_holiday_2nd_mon_of_jun(self.sovereign_birthday)
|
|
|
|
if 1912 <= self._year <= 2010:
|
|
# Bank Holiday.
|
|
self._add_holiday_1st_mon_of_aug(tr("Bank Holiday"))
|
|
|
|
# Christmas Day.
|
|
# 1912-2010: SUN - add TUE.
|
|
# from 2011: SAT - add MON, SUN - add TUE.
|
|
|
|
self._add_observed(
|
|
# Christmas Day.
|
|
self._add_christmas_day(tr("Christmas Day")),
|
|
rule=SAT_SUN_TO_NEXT_MON_TUE if self._year >= 2011 else SUN_TO_NEXT_TUE,
|
|
)
|
|
|
|
# Boxing Day.
|
|
# 1912-2010: SUN - add MON.
|
|
# from 2011: SAT - add MON, SUN - add TUE.
|
|
|
|
self._add_observed(
|
|
# Boxing Day.
|
|
self._add_christmas_day_two(tr("Boxing Day")),
|
|
rule=SAT_SUN_TO_NEXT_MON_TUE if self._year >= 2011 else SUN_TO_NEXT_MON,
|
|
)
|
|
|
|
def _populate_subdiv_nsw_bank_holidays(self):
|
|
if self._year >= 2011:
|
|
# Bank Holiday.
|
|
self._add_holiday_1st_mon_of_aug(tr("Bank Holiday"))
|
|
|
|
def _populate_subdiv_nt_public_holidays(self):
|
|
# New Year's Day.
|
|
# 1982-2016: SAT, SUN - move to MON.
|
|
# from 2017: SAT, SUN - add MON.
|
|
|
|
# New Year's Day.
|
|
name = tr("New Year's Day")
|
|
if self._year >= 2017:
|
|
self._add_observed(self._add_new_years_day(name))
|
|
elif self._year >= 1982 and self._is_weekend(JAN, 1):
|
|
self._add_holiday_1st_mon_from_jan_1(name)
|
|
else:
|
|
self._add_new_years_day(name)
|
|
|
|
# Australia Day.
|
|
# from 1982: SAT, SUN - move to MON.
|
|
|
|
# Australia Day.
|
|
if self._year >= 1888:
|
|
if self._year >= 1982 and self._is_weekend(JAN, 26):
|
|
self._add_holiday_1st_mon_from_jan_26(self.australia_day)
|
|
else:
|
|
self._add_holiday_jan_26(self.australia_day)
|
|
|
|
# Easter Saturday.
|
|
self._add_holy_saturday(tr("Easter Saturday"))
|
|
|
|
if self._year >= 2024:
|
|
# Easter Sunday.
|
|
self._add_easter_sunday(tr("Easter Sunday"))
|
|
|
|
# ANZAC Day.
|
|
# from 1982: SUN - to MON.
|
|
|
|
if self._year >= 1921:
|
|
# ANZAC Day.
|
|
name = tr("ANZAC Day")
|
|
if self._year >= 1982 and self._is_sunday(APR, 25):
|
|
self._add_holiday_1st_mon_from_apr_25(name)
|
|
else:
|
|
self._add_anzac_day(name)
|
|
|
|
# May Day.
|
|
self._add_holiday_1st_mon_of_may(tr("May Day"))
|
|
|
|
# Sovereign's Birthday.
|
|
if self._year >= 1936:
|
|
self._add_holiday_2nd_mon_of_jun(self.sovereign_birthday)
|
|
|
|
# Picnic Day.
|
|
self._add_holiday_1st_mon_of_aug(tr("Picnic Day"))
|
|
|
|
# Christmas Day.
|
|
# 1981-2015: SAT, SUN - to MON.
|
|
# from 2016: SAT, SUN - add MON.
|
|
|
|
# Christmas Day.
|
|
name = tr("Christmas Day")
|
|
if self._year >= 2016:
|
|
self._add_observed(self._add_christmas_day(name))
|
|
elif self._year >= 1981 and self._is_weekend(DEC, 25):
|
|
self._add_holiday_1st_mon_from_dec_25(name)
|
|
else:
|
|
self._add_christmas_day(name)
|
|
|
|
# Boxing Day.
|
|
# 1981-2022: SAT - to MON, SUN - to TUE, MON - to TUE.
|
|
# from 2023: SAT - add MON, SUN - add TUE, MON - add TUE.
|
|
|
|
# Boxing Day.
|
|
name = tr("Boxing Day")
|
|
if self._year >= 2023:
|
|
self._add_observed(
|
|
self._add_christmas_day_two(name), rule=SAT_SUN_TO_NEXT_MON_TUE + MON_TO_NEXT_TUE
|
|
)
|
|
elif self._year >= 1981:
|
|
dec_26 = (DEC, 26)
|
|
if self._is_saturday(dec_26):
|
|
self._add_holiday_1st_mon_from_dec_26(name)
|
|
elif self._is_sunday(dec_26) or self._is_monday(dec_26):
|
|
self._add_holiday_1st_tue_from_dec_26(name)
|
|
else:
|
|
self._add_christmas_day_two(name)
|
|
else:
|
|
self._add_christmas_day_two(name)
|
|
|
|
def _populate_subdiv_nt_half_day_holidays(self):
|
|
if self._year >= 2016:
|
|
# %s (from 7pm).
|
|
begin_time_label = self.tr("%s (from 7pm)")
|
|
|
|
# Christmas Eve.
|
|
self._add_christmas_eve(begin_time_label % self.tr("Christmas Eve"))
|
|
|
|
# New Year's Eve.
|
|
self._add_new_years_eve(begin_time_label % self.tr("New Year's Eve"))
|
|
|
|
def _populate_subdiv_qld_public_holidays(self):
|
|
# New Year's Day.
|
|
# 1984-2011: SUN - move to MON.
|
|
# from 2012: SAT, SUN - add MON.
|
|
|
|
# New Year's Day.
|
|
name = tr("New Year's Day")
|
|
if self._year >= 2012:
|
|
self._add_observed(self._add_new_years_day(name))
|
|
elif self._year >= 1984 and self._is_sunday(JAN, 1):
|
|
self._add_holiday_1st_mon_from_jan_1(name)
|
|
else:
|
|
self._add_new_years_day(name)
|
|
|
|
# Australia Day.
|
|
# 1984-1995: not MON - move to MON.
|
|
# from 1996: SAT, SUN - move to MON.
|
|
|
|
# Australia Day.
|
|
if self._year >= 1888:
|
|
if 1984 <= self._year <= 1995 or (self._year >= 1996 and self._is_weekend(JAN, 26)):
|
|
self._add_holiday_1st_mon_from_jan_26(self.australia_day)
|
|
else:
|
|
self._add_holiday_jan_26(self.australia_day)
|
|
|
|
# Easter Saturday.
|
|
self._add_holy_saturday(tr("Easter Saturday"))
|
|
|
|
if self._year >= 2017:
|
|
# Easter Sunday.
|
|
self._add_easter_sunday(tr("Easter Sunday"))
|
|
|
|
# ANZAC Day.
|
|
# from 1984: SUN - move to MON.
|
|
|
|
if self._year >= 1921:
|
|
# ANZAC Day.
|
|
name = tr("ANZAC Day")
|
|
if self._year >= 1984 and self._is_sunday(APR, 25):
|
|
self._add_holiday_1st_mon_from_apr_25(name)
|
|
else:
|
|
self._add_anzac_day(name)
|
|
|
|
# Labor Day.
|
|
name = tr("Labour Day")
|
|
if 2013 <= self._year <= 2015:
|
|
self._add_holiday_1st_mon_of_oct(name)
|
|
else:
|
|
self._add_holiday_1st_mon_of_may(name)
|
|
|
|
# Sovereign's Birthday.
|
|
if self._year >= 1936:
|
|
if self._year <= 2015 and self._year != 2012:
|
|
self._add_holiday_2nd_mon_of_jun(self.sovereign_birthday)
|
|
else:
|
|
self._add_holiday_1st_mon_of_oct(self.sovereign_birthday)
|
|
|
|
# The Royal Queensland Show (Ekka).
|
|
# The Show starts on the first Friday of August - providing this is
|
|
# not prior to the 5th - in which case it will begin on the second
|
|
# Friday. The Wednesday during the show is a public holiday.
|
|
ekka_dates = {
|
|
2020: (AUG, 14),
|
|
2021: (OCT, 29),
|
|
}
|
|
# The Royal Queensland Show.
|
|
name = tr("The Royal Queensland Show")
|
|
if dt := ekka_dates.get(self._year):
|
|
self._add_holiday(name, dt)
|
|
else:
|
|
# [1st FRI after Aug 5] + 5 days = [1st WED after Aug 10]
|
|
self._add_holiday_1st_wed_from_aug_10(name)
|
|
|
|
# Christmas Day.
|
|
# 1984-2010: SUN - to MON.
|
|
# from 2011: SAT - add MON, SUN - add TUE.
|
|
|
|
# Christmas Day.
|
|
name = tr("Christmas Day")
|
|
if self._year >= 2011:
|
|
self._add_observed(self._add_christmas_day(name), rule=SAT_SUN_TO_NEXT_MON_TUE)
|
|
elif self._year >= 1984 and self._is_sunday(DEC, 25):
|
|
self._add_holiday_1st_mon_from_dec_25(name)
|
|
else:
|
|
self._add_christmas_day(name)
|
|
|
|
# Boxing Day.
|
|
# 1984-1910: SUN - to MON, MON - to TUE.
|
|
# from 2011: SAT - add MON, SUN - add TUE.
|
|
|
|
# Boxing Day.
|
|
name = tr("Boxing Day")
|
|
if self._year >= 2011:
|
|
self._add_observed(self._add_christmas_day_two(name), rule=SAT_SUN_TO_NEXT_MON_TUE)
|
|
elif self._year >= 1984:
|
|
dec_26 = (DEC, 26)
|
|
if self._is_sunday(dec_26):
|
|
self._add_holiday_1st_mon_from_dec_26(name)
|
|
elif self._is_monday(dec_26):
|
|
self._add_holiday_1st_tue_from_dec_26(name)
|
|
else:
|
|
self._add_christmas_day_two(name)
|
|
else:
|
|
self._add_christmas_day_two(name)
|
|
|
|
def _populate_subdiv_sa_public_holidays(self):
|
|
# New Year's Day.
|
|
# 1984-2003: SAT, SUN - move to MON.
|
|
# 2004-2023: SAT - move to MON, SUN - add MON.
|
|
# from 2024: SAT, SUN - add MON.
|
|
|
|
# New Year's Day.
|
|
name = tr("New Year's Day")
|
|
jan_1 = (JAN, 1)
|
|
if self._year >= 2024:
|
|
self._add_observed(self._add_new_years_day(name))
|
|
elif self._year >= 2004:
|
|
if self._is_saturday(jan_1):
|
|
self._add_holiday_1st_mon_from_jan_1(name)
|
|
else:
|
|
self._add_observed(self._add_new_years_day(name), rule=SUN_TO_NEXT_MON)
|
|
elif self._year >= 1984 and self._is_weekend(jan_1):
|
|
self._add_holiday_1st_mon_from_jan_1(name)
|
|
else:
|
|
self._add_new_years_day(name)
|
|
|
|
# Australia Day.
|
|
# 1984-1993: not MON - move to MON.
|
|
# 1994-2003: SAT, SUN - move to MON.
|
|
# 2004-2023: SAT - move to MON, SUN - add MON.
|
|
# from 2024: SAT, SUN - move to MON.
|
|
|
|
if self._year >= 1935:
|
|
# Australia Day.
|
|
name = tr("Australia Day")
|
|
jan_26 = (JAN, 26)
|
|
if 1994 <= self._year <= 2003 or self._year >= 2024:
|
|
if self._is_weekend(jan_26):
|
|
self._add_holiday_1st_mon_from_jan_26(name)
|
|
else:
|
|
self._add_holiday_jan_26(name)
|
|
elif self._year >= 2004:
|
|
if self._is_saturday(jan_26):
|
|
self._add_holiday_1st_mon_from_jan_26(name)
|
|
else:
|
|
self._add_observed(self._add_holiday_jan_26(name), rule=SUN_TO_NEXT_MON)
|
|
elif self._year >= 1984:
|
|
self._add_holiday_1st_mon_from_jan_26(name)
|
|
else:
|
|
self._add_holiday_jan_26(name)
|
|
|
|
# Adelaide Cup Day.
|
|
# First observed as Public Holidays in 1973: https://racingsa.com.au/blog/2020/03/06/2380/a-little-adelaide-cup-history
|
|
# 2006-2023: changed each year by SA Government Proclamation from the 3rd Monday in May
|
|
# to the 2nd Monday in March.
|
|
# from 2024: changed to the 2nd Monday in March officially.
|
|
|
|
# Adelaide Cup Day.
|
|
name = tr("Adelaide Cup Day")
|
|
if self._year >= 2006:
|
|
self._add_holiday_2nd_mon_of_mar(name)
|
|
elif self._year >= 1973:
|
|
self._add_holiday_3rd_mon_of_may(name)
|
|
|
|
# Easter Saturday.
|
|
self._add_holy_saturday(tr("Easter Saturday"))
|
|
|
|
if self._year >= 2024:
|
|
# Easter Sunday.
|
|
self._add_easter_sunday(tr("Easter Sunday"))
|
|
|
|
if self._year >= 1921:
|
|
# ANZAC Day.
|
|
apr_25 = self._add_anzac_day(tr("ANZAC Day"))
|
|
if self._year <= 2023:
|
|
self._add_observed(apr_25, rule=SUN_TO_NEXT_MON)
|
|
|
|
# Sovereign's Birthday.
|
|
if self._year >= 1936:
|
|
self._add_holiday_2nd_mon_of_jun(self.sovereign_birthday)
|
|
|
|
# Labor Day.
|
|
self._add_holiday_1st_mon_of_oct(tr("Labour Day"))
|
|
|
|
# Proclamation Day.
|
|
# 1984-1992: SAT, SUN - move to MON.
|
|
# 1993-2002: SAT - to MON, SUN - to TUE, MON - to TUE.
|
|
# 2003-2023: SAT - to MON, SUN - add TUE, MON - add TUE.
|
|
# from 2024: SAT - add MON, SUN - add TUE, MON - add TUE.
|
|
# (Placed before Christmas Day for proper observed calculation).
|
|
|
|
# Proclamation Day.
|
|
name = tr("Proclamation Day")
|
|
dec_26 = (DEC, 26)
|
|
if self._year >= 2024:
|
|
self._add_observed(
|
|
self._add_christmas_day_two(name), rule=SAT_SUN_TO_NEXT_MON_TUE + MON_TO_NEXT_TUE
|
|
)
|
|
elif self._year >= 2003:
|
|
if self._is_saturday(dec_26):
|
|
self._add_holiday_1st_mon_from_dec_26(name)
|
|
else:
|
|
self._add_observed(
|
|
self._add_christmas_day_two(name), rule=SUN_TO_NEXT_TUE + MON_TO_NEXT_TUE
|
|
)
|
|
elif self._year >= 1993:
|
|
if self._is_saturday(dec_26):
|
|
self._add_holiday_1st_mon_from_dec_26(name)
|
|
elif self._is_sunday(dec_26) or self._is_monday(dec_26):
|
|
self._add_holiday_1st_tue_from_dec_26(name)
|
|
else:
|
|
self._add_christmas_day_two(name)
|
|
elif self._year >= 1984 and self._is_weekend(dec_26):
|
|
self._add_holiday_1st_mon_from_dec_26(name)
|
|
else:
|
|
self._add_christmas_day_two(name)
|
|
|
|
# Christmas Day.
|
|
# 1984-2002: SAT, SUN - move to MON.
|
|
# 2003-2023: SAT - move to MON, SUN - add MON.
|
|
# from 2024: SAT, SUN - add MON.
|
|
|
|
# Christmas Day.
|
|
name = tr("Christmas Day")
|
|
dec_25 = (DEC, 25)
|
|
if self._year >= 2024:
|
|
self._add_observed(self._add_christmas_day(name))
|
|
elif self._year >= 2003:
|
|
if self._is_saturday(dec_25):
|
|
self._add_holiday_1st_mon_from_dec_25(name)
|
|
else:
|
|
self._add_observed(self._add_christmas_day(name), rule=SUN_TO_NEXT_MON)
|
|
elif self._year >= 1984 and self._is_weekend(dec_25):
|
|
self._add_holiday_1st_mon_from_dec_25(name)
|
|
else:
|
|
self._add_christmas_day(name)
|
|
|
|
def _populate_subdiv_sa_half_day_holidays(self):
|
|
if self._year >= 2012:
|
|
# %s (from 7pm).
|
|
begin_time_label = self.tr("%s (from 7pm)")
|
|
|
|
# Christmas Eve.
|
|
self._add_christmas_eve(begin_time_label % self.tr("Christmas Eve"))
|
|
|
|
# New Year's Eve.
|
|
self._add_new_years_eve(begin_time_label % self.tr("New Year's Eve"))
|
|
|
|
def _populate_subdiv_tas_public_holidays(self):
|
|
# New Year's Day.
|
|
# from 2001: SAT, SUN - move to MON.
|
|
|
|
# New Year's Day.
|
|
name = tr("New Year's Day")
|
|
if self._year >= 2001 and self._is_weekend(JAN, 1):
|
|
self._add_holiday_1st_mon_from_jan_1(name)
|
|
else:
|
|
self._add_new_years_day(name)
|
|
|
|
# Australia Day.
|
|
# from 2001: SAT, SUN - move to MON.
|
|
|
|
# Australia Day.
|
|
if self._year >= 1888:
|
|
if self._year >= 2001 and self._is_weekend(JAN, 26):
|
|
self._add_holiday_1st_mon_from_jan_26(self.australia_day)
|
|
else:
|
|
self._add_holiday_jan_26(self.australia_day)
|
|
|
|
# Eight Hours Day.
|
|
self._add_holiday_2nd_mon_of_mar(tr("Eight Hours Day"))
|
|
|
|
if self._year <= 2010:
|
|
# Easter Tuesday.
|
|
self._add_easter_tuesday(tr("Easter Tuesday"))
|
|
|
|
if self._year >= 1921:
|
|
# ANZAC Day.
|
|
self._add_anzac_day(tr("ANZAC Day"))
|
|
|
|
# Sovereign's Birthday.
|
|
if self._year >= 1936:
|
|
self._add_holiday_2nd_mon_of_jun(self.sovereign_birthday)
|
|
|
|
# Christmas Day.
|
|
# 2000-2009: SAT - to MON, SUN - to TUE.
|
|
# from 2010: SAT - add MON, SUN - add TUE.
|
|
|
|
# Christmas Day.
|
|
name = tr("Christmas Day")
|
|
if self._year >= 2010:
|
|
self._add_observed(self._add_christmas_day(name), rule=SAT_SUN_TO_NEXT_MON_TUE)
|
|
elif self._year >= 2000:
|
|
dec_25 = (DEC, 25)
|
|
if self._is_saturday(dec_25):
|
|
self._add_holiday_1st_mon_from_dec_25(name)
|
|
elif self._is_sunday(dec_25):
|
|
self._add_holiday_1st_tue_from_dec_25(name)
|
|
else:
|
|
self._add_christmas_day(name)
|
|
else:
|
|
self._add_christmas_day(name)
|
|
|
|
# Boxing Day.
|
|
# from 2000: SAT - to MON, SUN - to TUE.
|
|
|
|
# Boxing Day.
|
|
name = tr("Boxing Day")
|
|
if self._year >= 2000:
|
|
dec_26 = (DEC, 26)
|
|
if self._is_saturday(dec_26):
|
|
self._add_holiday_1st_mon_from_dec_26(name)
|
|
elif self._is_sunday(dec_26):
|
|
self._add_holiday_1st_tue_from_dec_26(name)
|
|
else:
|
|
self._add_christmas_day_two(name)
|
|
else:
|
|
self._add_christmas_day_two(name)
|
|
|
|
def _populate_subdiv_vic_public_holidays(self):
|
|
# New Year's Day.
|
|
# 1994-1997: SUN - add MON.
|
|
# 1998-2008: SUN - move to MON.
|
|
# from 2009: SAT, SUN - add MON.
|
|
|
|
# New Year's Day.
|
|
name = tr("New Year's Day")
|
|
if self._year >= 2009:
|
|
self._add_observed(self._add_new_years_day(name))
|
|
elif self._year >= 1998:
|
|
if self._is_sunday(JAN, 1):
|
|
self._add_holiday_1st_mon_from_jan_1(name)
|
|
else:
|
|
self._add_new_years_day(name)
|
|
elif self._year >= 1994:
|
|
self._add_observed(self._add_new_years_day(name), rule=SUN_TO_NEXT_MON)
|
|
else:
|
|
self._add_new_years_day(name)
|
|
|
|
# Australia Day.
|
|
# from 2009: SAT, SUN - move to MON.
|
|
|
|
# Australia Day.
|
|
if self._year >= 1888:
|
|
if self._year >= 2009 and self._is_weekend(JAN, 26):
|
|
self._add_holiday_1st_mon_from_jan_26(self.australia_day)
|
|
else:
|
|
self._add_holiday_jan_26(self.australia_day)
|
|
|
|
# Labor Day.
|
|
self._add_holiday_2nd_mon_of_mar(tr("Labour Day"))
|
|
|
|
if self._year >= 2003:
|
|
# Easter Saturday.
|
|
self._add_holy_saturday(tr("Easter Saturday"))
|
|
|
|
if self._year >= 2016:
|
|
# Easter Sunday.
|
|
self._add_easter_sunday(tr("Easter Sunday"))
|
|
|
|
if self._year >= 1921:
|
|
# ANZAC Day.
|
|
self._add_anzac_day(tr("ANZAC Day"))
|
|
|
|
# Sovereign's Birthday.
|
|
if self._year >= 1936:
|
|
self._add_holiday_2nd_mon_of_jun(self.sovereign_birthday)
|
|
|
|
if self._year >= 2015:
|
|
grand_final_dates = {
|
|
2015: (OCT, 2),
|
|
2016: (SEP, 30),
|
|
# Rescheduled due to COVID-19.
|
|
2020: (OCT, 23),
|
|
}
|
|
# Grand Final Day.
|
|
name = tr("Grand Final Day")
|
|
if dt := grand_final_dates.get(self._year):
|
|
self._add_holiday(name, dt)
|
|
else:
|
|
self._add_holiday_1_day_prior_last_sat_of_sep(name)
|
|
|
|
if self._year >= 2009:
|
|
# Melbourne Cup Day.
|
|
self._add_holiday_1st_tue_of_nov(tr("Melbourne Cup Day"))
|
|
|
|
# Christmas Day.
|
|
# 2008-2018: SAT - to MON, SUN - to TUE.
|
|
# from 2019: SAT - add MON, SUN - add TUE.
|
|
|
|
# Christmas Day.
|
|
name = tr("Christmas Day")
|
|
if self._year >= 2019:
|
|
self._add_observed(self._add_christmas_day(name), rule=SAT_SUN_TO_NEXT_MON_TUE)
|
|
elif self._year >= 2000:
|
|
dec_25 = (DEC, 25)
|
|
if self._is_saturday(dec_25):
|
|
self._add_holiday_1st_mon_from_dec_25(name)
|
|
elif self._is_sunday(dec_25):
|
|
self._add_holiday_1st_tue_from_dec_25(name)
|
|
else:
|
|
self._add_christmas_day(name)
|
|
else:
|
|
self._add_christmas_day(name)
|
|
|
|
# Boxing Day.
|
|
# 1994-2008: SUN - to MON.
|
|
# from 2009: SAT - add MON, SUN - add TUE.
|
|
|
|
# Boxing Day.
|
|
name = tr("Boxing Day")
|
|
if self._year >= 2009:
|
|
self._add_observed(self._add_christmas_day_two(name), rule=SAT_SUN_TO_NEXT_MON_TUE)
|
|
elif self._year >= 1994 and self._is_sunday(DEC, 26):
|
|
self._add_holiday_1st_tue_from_dec_26(name)
|
|
else:
|
|
self._add_christmas_day_two(name)
|
|
|
|
def _populate_subdiv_wa_public_holidays(self):
|
|
# New Year's Day.
|
|
# from 1973: SAT, SUN - add MON.
|
|
|
|
# New Year's Day.
|
|
jan_1 = self._add_new_years_day(tr("New Year's Day"))
|
|
if self._year >= 1973:
|
|
self._add_observed(jan_1)
|
|
|
|
# Australia Day.
|
|
# 1973-1993: not MON - move to MON.
|
|
# from 1994: SAT, SUN - move to MON.
|
|
|
|
# Australia Day.
|
|
if self._year >= 1888:
|
|
if self._year >= 1994:
|
|
if self._is_weekend(JAN, 26):
|
|
self._add_holiday_1st_mon_from_jan_26(self.australia_day)
|
|
else:
|
|
self._add_holiday_jan_26(self.australia_day)
|
|
elif self._year >= 1973:
|
|
self._add_holiday_1st_mon_from_jan_26(self.australia_day)
|
|
else:
|
|
self._add_holiday_jan_26(self.australia_day)
|
|
|
|
# Labor Day.
|
|
self._add_holiday_1st_mon_of_mar(tr("Labour Day"))
|
|
|
|
if self._year >= 2022:
|
|
# Easter Sunday.
|
|
self._add_easter_sunday(tr("Easter Sunday"))
|
|
|
|
if self._year >= 1921:
|
|
# ANZAC Day.
|
|
apr_25 = self._add_anzac_day(tr("ANZAC Day"))
|
|
if self._year >= 1973:
|
|
self._add_observed(apr_25)
|
|
|
|
if self._year >= 1833:
|
|
self._add_holiday_1st_mon_of_jun(
|
|
# Western Australia Day.
|
|
tr("Western Australia Day")
|
|
if self._year >= 2012
|
|
# Foundation Day.
|
|
else tr("Foundation Day")
|
|
)
|
|
|
|
# Sovereign's Birthday.
|
|
if self._year >= 1936:
|
|
if self._year >= 1984:
|
|
# Celebration Day for the Anniversary of the Birthday of the Reigning Sovereign
|
|
# to be appointed for each year by proclamation published in the Government Gazette
|
|
sovereign_birthday_dates = {
|
|
2011: (OCT, 28),
|
|
2012: (OCT, 1),
|
|
2024: (SEP, 23),
|
|
}
|
|
if dt := sovereign_birthday_dates.get(self._year):
|
|
self._add_holiday(self.sovereign_birthday, dt)
|
|
else:
|
|
self._add_holiday_last_mon_of_sep(self.sovereign_birthday)
|
|
else:
|
|
self._add_holiday_2nd_mon_of_oct(self.sovereign_birthday)
|
|
|
|
# Boxing Day.
|
|
# 1972-1975: SAT - add MON, SUN - add TUE.
|
|
# from 1976: SAT - add MON, SUN - add TUE, MON - add TUE.
|
|
# (Placed before Christmas Day for proper observed calculation).
|
|
|
|
# Boxing Day.
|
|
dec_26 = self._add_christmas_day_two(tr("Boxing Day"))
|
|
if self._year >= 1972:
|
|
self._add_observed(
|
|
dec_26,
|
|
rule=SAT_SUN_TO_NEXT_MON_TUE + MON_TO_NEXT_TUE
|
|
if self._year >= 1976
|
|
else SAT_SUN_TO_NEXT_MON_TUE,
|
|
)
|
|
|
|
# Christmas Day.
|
|
# from 1972: SAT, SUN - add MON.
|
|
|
|
# Christmas Day.
|
|
dec_25 = self._add_christmas_day(tr("Christmas Day"))
|
|
if self._year >= 1972:
|
|
self._add_observed(dec_25)
|
|
|
|
|
|
class AU(Australia):
|
|
pass
|
|
|
|
|
|
class AUS(Australia):
|
|
pass
|
|
|
|
|
|
class AustraliaStaticHolidays:
|
|
# Special public holiday.
|
|
special_public_holiday = tr("Special public holiday")
|
|
|
|
special_public_holidays = {
|
|
# National Day of Mourning for Queen Elizabeth II.
|
|
2022: (SEP, 22, tr("National Day of Mourning for Queen Elizabeth II")),
|
|
}
|
|
|
|
special_act_public_holidays = {
|
|
# Declared public holiday.
|
|
2020: (APR, 20, tr("Declared public holiday")),
|
|
# Additional public holiday.
|
|
2021: (APR, 25, tr("Additional public holiday")),
|
|
}
|
|
|
|
special_qld_public_holidays = {
|
|
# Queen's Diamond Jubilee.
|
|
2012: (JUN, 11, tr("Queen's Diamond Jubilee")),
|
|
}
|
|
|
|
special_qld_public_holidays_observed = {
|
|
# Christmas Day.
|
|
2010: (DEC, 28, tr("Christmas Day")),
|
|
# New Year's Day.
|
|
2011: (JAN, 3, tr("New Year's Day")),
|
|
}
|
|
|
|
special_wa_public_holidays = {
|
|
# In 2011 both ANZAC Day and Easter Monday fell on Monday 25 April.
|
|
2011: (APR, 26, special_public_holiday),
|
|
}
|