From f1e072eecc9e7449e0dec1a2182e4a237584d4ec Mon Sep 17 00:00:00 2001 From: ~Jhellico Date: Sat, 26 Jul 2025 19:09:14 +0300 Subject: [PATCH 1/6] Add checked year range support for custom calendars --- holidays/calendars/islamic.py | 6 +++++- holidays/countries/azerbaijan.py | 37 ++------------------------------ 2 files changed, 7 insertions(+), 36 deletions(-) diff --git a/holidays/calendars/islamic.py b/holidays/calendars/islamic.py index 55ad54411..501a94ace 100644 --- a/holidays/calendars/islamic.py +++ b/holidays/calendars/islamic.py @@ -3973,9 +3973,13 @@ class _IslamicLunar: def _get_holiday(self, holiday: str, year: int) -> Iterable[tuple[date, bool]]: estimated_dates = getattr(self, f"{holiday}_DATES", {}) exact_dates = getattr(self, f"{holiday}_DATES_{_CustomCalendar.CUSTOM_ATTR_POSTFIX}", {}) + checked_range = getattr( + self, f"{holiday}_CHECKED_RANGE_{_CustomCalendar.CUSTOM_ATTR_POSTFIX}", None + ) for year in (year - 1, year): for dt in _normalize_tuple(exact_dates.get(year, estimated_dates.get(year, ()))): - yield date(year, *dt), year not in exact_dates + checked = checked_range and checked_range[0] <= year <= checked_range[1] + yield date(year, *dt), not (year in exact_dates or checked) def _is_long_ramadan(self, eid_al_fitr: date) -> bool: """Check whether the Ramadan preceding the given Eid al-Fitr date lasted 30 days. diff --git a/holidays/countries/azerbaijan.py b/holidays/countries/azerbaijan.py index 49d126b26..f9ebdd306 100644 --- a/holidays/countries/azerbaijan.py +++ b/holidays/countries/azerbaijan.py @@ -206,58 +206,25 @@ class AZE(Azerbaijan): class AzerbaijanIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_CHECKED_RANGE = (2002, 2025) EID_AL_ADHA_DATES = { 2002: (FEB, 21), - 2003: (FEB, 11), - 2004: (FEB, 1), 2005: (JAN, 22), - 2006: ((JAN, 10), (DEC, 31)), - 2007: (DEC, 20), - 2008: (DEC, 8), - 2009: (NOV, 27), - 2010: (NOV, 16), - 2011: (NOV, 6), 2012: (OCT, 25), - 2013: (OCT, 15), - 2014: (OCT, 4), 2015: (SEP, 24), 2016: (SEP, 12), - 2017: (SEP, 1), 2018: (AUG, 22), 2019: (AUG, 12), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), - 2024: (JUN, 16), - 2025: (JUN, 6), } + EID_AL_FITR_CHECKED_RANGE = (2002, 2025) EID_AL_FITR_DATES = { 2002: (DEC, 4), - 2003: (NOV, 25), - 2004: (NOV, 14), - 2005: (NOV, 3), - 2006: (OCT, 23), 2007: (OCT, 12), 2008: (SEP, 30), - 2009: (SEP, 20), 2010: (SEP, 9), - 2011: (AUG, 30), - 2012: (AUG, 19), - 2013: (AUG, 8), - 2014: (JUL, 28), - 2015: (JUL, 17), - 2016: (JUL, 6), 2017: (JUN, 26), - 2018: (JUN, 15), 2019: (JUN, 5), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), - 2023: (APR, 21), - 2024: (APR, 10), - 2025: (MAR, 30), } From e87e8564143bee3be518dc8bff1ab47a68a64539 Mon Sep 17 00:00:00 2001 From: ~Jhellico Date: Thu, 31 Jul 2025 17:01:20 +0300 Subject: [PATCH 2/6] PR suggestions --- holidays/calendars/islamic.py | 8 +++++--- holidays/countries/azerbaijan.py | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/holidays/calendars/islamic.py b/holidays/calendars/islamic.py index 501a94ace..0e32a9673 100644 --- a/holidays/calendars/islamic.py +++ b/holidays/calendars/islamic.py @@ -3974,12 +3974,14 @@ def _get_holiday(self, holiday: str, year: int) -> Iterable[tuple[date, bool]]: estimated_dates = getattr(self, f"{holiday}_DATES", {}) exact_dates = getattr(self, f"{holiday}_DATES_{_CustomCalendar.CUSTOM_ATTR_POSTFIX}", {}) checked_range = getattr( - self, f"{holiday}_CHECKED_RANGE_{_CustomCalendar.CUSTOM_ATTR_POSTFIX}", None + self, f"{holiday}_CONFIRMED_YEARS_{_CustomCalendar.CUSTOM_ATTR_POSTFIX}", None ) for year in (year - 1, year): for dt in _normalize_tuple(exact_dates.get(year, estimated_dates.get(year, ()))): - checked = checked_range and checked_range[0] <= year <= checked_range[1] - yield date(year, *dt), not (year in exact_dates or checked) + is_checked = checked_range and any( + yfrom <= year <= yto for yfrom, yto in _normalize_tuple(checked_range) + ) + yield date(year, *dt), not (year in exact_dates or is_checked) def _is_long_ramadan(self, eid_al_fitr: date) -> bool: """Check whether the Ramadan preceding the given Eid al-Fitr date lasted 30 days. diff --git a/holidays/countries/azerbaijan.py b/holidays/countries/azerbaijan.py index f9ebdd306..1cd8b8acf 100644 --- a/holidays/countries/azerbaijan.py +++ b/holidays/countries/azerbaijan.py @@ -206,7 +206,7 @@ class AZE(Azerbaijan): class AzerbaijanIslamicHolidays(_CustomIslamicHolidays): - EID_AL_ADHA_CHECKED_RANGE = (2002, 2025) + EID_AL_ADHA_CONFIRMED_YEARS = (2002, 2025) EID_AL_ADHA_DATES = { 2002: (FEB, 21), 2005: (JAN, 22), @@ -217,7 +217,7 @@ class AzerbaijanIslamicHolidays(_CustomIslamicHolidays): 2019: (AUG, 12), } - EID_AL_FITR_CHECKED_RANGE = (2002, 2025) + EID_AL_FITR_CONFIRMED_YEARS = (2002, 2025) EID_AL_FITR_DATES = { 2002: (DEC, 4), 2007: (OCT, 12), From 0b6d6e23bc9e508ecace538d3bf6beaa405c0c46 Mon Sep 17 00:00:00 2001 From: ~Jhellico Date: Thu, 31 Jul 2025 17:03:50 +0300 Subject: [PATCH 3/6] Rename --- holidays/calendars/islamic.py | 2 +- holidays/countries/azerbaijan.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/holidays/calendars/islamic.py b/holidays/calendars/islamic.py index 0e32a9673..6a55defec 100644 --- a/holidays/calendars/islamic.py +++ b/holidays/calendars/islamic.py @@ -3974,7 +3974,7 @@ def _get_holiday(self, holiday: str, year: int) -> Iterable[tuple[date, bool]]: estimated_dates = getattr(self, f"{holiday}_DATES", {}) exact_dates = getattr(self, f"{holiday}_DATES_{_CustomCalendar.CUSTOM_ATTR_POSTFIX}", {}) checked_range = getattr( - self, f"{holiday}_CONFIRMED_YEARS_{_CustomCalendar.CUSTOM_ATTR_POSTFIX}", None + self, f"{holiday}_DATES_CONFIRMED_YEARS_{_CustomCalendar.CUSTOM_ATTR_POSTFIX}", None ) for year in (year - 1, year): for dt in _normalize_tuple(exact_dates.get(year, estimated_dates.get(year, ()))): diff --git a/holidays/countries/azerbaijan.py b/holidays/countries/azerbaijan.py index 1cd8b8acf..2c315b2a4 100644 --- a/holidays/countries/azerbaijan.py +++ b/holidays/countries/azerbaijan.py @@ -206,7 +206,7 @@ class AZE(Azerbaijan): class AzerbaijanIslamicHolidays(_CustomIslamicHolidays): - EID_AL_ADHA_CONFIRMED_YEARS = (2002, 2025) + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2002, 2025) EID_AL_ADHA_DATES = { 2002: (FEB, 21), 2005: (JAN, 22), @@ -217,7 +217,7 @@ class AzerbaijanIslamicHolidays(_CustomIslamicHolidays): 2019: (AUG, 12), } - EID_AL_FITR_CONFIRMED_YEARS = (2002, 2025) + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2002, 2025) EID_AL_FITR_DATES = { 2002: (DEC, 4), 2007: (OCT, 12), From d993b847a27a003a9c7861e1d00a2405c5a7f9a6 Mon Sep 17 00:00:00 2001 From: Arkadii Yakovets Date: Mon, 4 Aug 2025 09:14:15 -0700 Subject: [PATCH 4/6] Update code --- holidays/calendars/islamic.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/holidays/calendars/islamic.py b/holidays/calendars/islamic.py index 6a55defec..21c2b3aee 100644 --- a/holidays/calendars/islamic.py +++ b/holidays/calendars/islamic.py @@ -3971,17 +3971,23 @@ class _IslamicLunar: } def _get_holiday(self, holiday: str, year: int) -> Iterable[tuple[date, bool]]: - estimated_dates = getattr(self, f"{holiday}_DATES", {}) - exact_dates = getattr(self, f"{holiday}_DATES_{_CustomCalendar.CUSTOM_ATTR_POSTFIX}", {}) - checked_range = getattr( - self, f"{holiday}_DATES_CONFIRMED_YEARS_{_CustomCalendar.CUSTOM_ATTR_POSTFIX}", None + confirmed_dates = getattr( + self, f"{holiday}_DATES_{_CustomCalendar.CUSTOM_ATTR_POSTFIX}", {} + ) + confirmed_years = getattr( + self, f"{holiday}_DATES_CONFIRMED_YEARS_{_CustomCalendar.CUSTOM_ATTR_POSTFIX}", () ) - for year in (year - 1, year): - for dt in _normalize_tuple(exact_dates.get(year, estimated_dates.get(year, ()))): - is_checked = checked_range and any( - yfrom <= year <= yto for yfrom, yto in _normalize_tuple(checked_range) + estimated_dates = getattr(self, f"{holiday}_DATES", {}) + + for check_year in (year - 1, year): + for dt in _normalize_tuple( + confirmed_dates.get(check_year, estimated_dates.get(check_year, ())) + ): + is_confirmed = check_year in confirmed_dates or any( + year_from <= check_year <= year_to + for year_from, year_to in _normalize_tuple(confirmed_years) ) - yield date(year, *dt), not (year in exact_dates or is_checked) + yield date(check_year, *dt), not is_confirmed def _is_long_ramadan(self, eid_al_fitr: date) -> bool: """Check whether the Ramadan preceding the given Eid al-Fitr date lasted 30 days. From 6ab8a76434524863a3857a247fd131d734555171 Mon Sep 17 00:00:00 2001 From: ~Jhellico Date: Fri, 1 Aug 2025 17:59:38 +0300 Subject: [PATCH 5/6] Update countries --- holidays/countries/afghanistan.py | 45 +----- holidays/countries/albania.py | 25 +-- holidays/countries/argentina.py | 21 +-- holidays/countries/bahrain.py | 25 +-- holidays/countries/bosnia_and_herzegovina.py | 29 +--- holidays/countries/brunei.py | 124 +-------------- holidays/countries/burkina_faso.py | 19 +-- holidays/countries/cameroon.py | 37 +---- .../countries/central_african_republic.py | 19 +-- holidays/countries/chad.py | 21 +-- holidays/countries/christmas_island.py | 18 +-- holidays/countries/cocos_islands.py | 29 +--- holidays/countries/egypt.py | 42 +---- holidays/countries/ethiopia.py | 26 +--- holidays/countries/fiji.py | 3 +- holidays/countries/gabon.py | 26 +--- holidays/countries/guinea.py | 32 +--- holidays/countries/guyana.py | 19 +-- holidays/countries/india.py | 37 ++--- holidays/countries/indonesia.py | 144 +----------------- holidays/countries/iran.py | 142 ++--------------- holidays/countries/kazakhstan.py | 20 +-- holidays/countries/kenya.py | 10 +- holidays/countries/lebanon.py | 92 +---------- holidays/countries/libya.py | 42 +---- holidays/countries/malaysia.py | 111 +------------- holidays/countries/mali.py | 13 +- holidays/countries/mauritius.py | 3 +- holidays/countries/montenegro.py | 21 +-- holidays/countries/nepal.py | 86 +++++------ holidays/countries/niger.py | 88 ++--------- holidays/countries/north_macedonia.py | 42 +---- holidays/countries/oman.py | 34 +---- holidays/countries/pakistan.py | 35 +---- holidays/countries/palestine.py | 7 +- holidays/countries/philippines.py | 19 +-- holidays/countries/qatar.py | 48 +----- holidays/countries/saudi_arabia.py | 3 + holidays/countries/senegal.py | 22 +-- holidays/countries/sierra_leone.py | 24 +-- holidays/countries/singapore.py | 37 +---- holidays/countries/spain.py | 13 +- holidays/countries/sri_lanka.py | 17 +-- holidays/countries/suriname.py | 30 ++-- holidays/countries/tanzania.py | 12 +- holidays/countries/timor_leste.py | 19 +-- holidays/countries/togo.py | 33 +--- holidays/countries/trinidad_and_tobago.py | 11 +- holidays/countries/turkey.py | 118 +------------- holidays/countries/united_arab_emirates.py | 34 +---- holidays/countries/uzbekistan.py | 34 +---- holidays/countries/yemen.py | 60 +------- snapshots/countries/NE_COMMON.json | 4 +- 53 files changed, 271 insertions(+), 1754 deletions(-) diff --git a/holidays/countries/afghanistan.py b/holidays/countries/afghanistan.py index 6af54636c..1d10fdd24 100644 --- a/holidays/countries/afghanistan.py +++ b/holidays/countries/afghanistan.py @@ -13,21 +13,7 @@ from gettext import gettext as tr from holidays.calendars import _CustomIslamicHolidays -from holidays.calendars.gregorian import ( - JAN, - MAR, - APR, - MAY, - JUN, - JUL, - AUG, - SEP, - OCT, - NOV, - DEC, - FRI, - SAT, -) +from holidays.calendars.gregorian import JAN, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC, FRI, SAT from holidays.groups import InternationalHolidays, IslamicHolidays, PersianCalendarHolidays from holidays.holiday_base import HolidayBase @@ -134,8 +120,8 @@ class AFG(Afghanistan): class AfghanistanIslamicHolidays(_CustomIslamicHolidays): + ASHURA_DATES_CONFIRMED_YEARS = (2014, 2021) ASHURA_DATES = { - 2014: (NOV, 3), 2015: (OCT, 24), 2016: (OCT, 12), 2017: (OCT, 1), @@ -145,34 +131,26 @@ class AfghanistanIslamicHolidays(_CustomIslamicHolidays): 2021: (AUG, 19), } + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2014, 2024) EID_AL_ADHA_DATES = { 2014: (OCT, 5), - 2015: (SEP, 23), 2016: (SEP, 13), 2017: (SEP, 2), 2018: (AUG, 22), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), 2024: (JUN, 17), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2014, 2024) EID_AL_FITR_DATES = { 2014: (JUL, 29), 2015: (JUL, 18), 2016: (JUL, 7), 2017: (JUN, 26), - 2018: (JUN, 15), - 2019: (JUN, 4), - 2020: (MAY, 24), - 2021: (MAY, 13), 2022: (MAY, 1), 2023: (APR, 22), - 2024: (APR, 10), } + MAWLID_DATES_CONFIRMED_YEARS = (2014, 2024) MAWLID_DATES = { 2014: (JAN, 14), 2015: ((JAN, 3), (DEC, 24)), @@ -180,23 +158,12 @@ class AfghanistanIslamicHolidays(_CustomIslamicHolidays): 2017: (DEC, 1), 2018: (NOV, 21), 2019: (NOV, 10), - 2020: (OCT, 29), 2021: (OCT, 19), - 2022: (OCT, 8), - 2023: (SEP, 27), 2024: (SEP, 16), } + RAMADAN_BEGINNING_DATES_CONFIRMED_YEARS = (2014, 2024) RAMADAN_BEGINNING_DATES = { 2014: (JUN, 29), - 2015: (JUN, 18), 2016: (JUN, 7), - 2017: (MAY, 27), - 2018: (MAY, 16), - 2019: (MAY, 6), - 2020: (APR, 24), - 2021: (APR, 13), - 2022: (APR, 2), - 2023: (MAR, 23), - 2024: (MAR, 11), } diff --git a/holidays/countries/albania.py b/holidays/countries/albania.py index 9b9c8b2fd..331b1174c 100644 --- a/holidays/countries/albania.py +++ b/holidays/countries/albania.py @@ -13,7 +13,7 @@ from gettext import gettext as tr from holidays.calendars import _CustomIslamicHolidays -from holidays.calendars.gregorian import JAN, MAR, APR, MAY, JUN, JUL, AUG +from holidays.calendars.gregorian import JAN, MAR from holidays.calendars.julian import JULIAN_CALENDAR from holidays.groups import ( ChristianHolidays, @@ -133,27 +133,8 @@ class ALB(Albania): class AlbaniaIslamicHolidays(_CustomIslamicHolidays): - EID_AL_ADHA_DATES = { - 2018: (AUG, 21), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), - 2024: (JUN, 16), - 2025: (JUN, 6), - } - - EID_AL_FITR_DATES = { - 2018: (JUN, 15), - 2019: (JUN, 4), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), - 2023: (APR, 21), - 2024: (APR, 10), - 2025: (MAR, 30), - } + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2018, 2025) + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2018, 2025) class AlbaniaStaticHolidays: diff --git a/holidays/countries/argentina.py b/holidays/countries/argentina.py index 2a5480ee9..eb33a154e 100644 --- a/holidays/countries/argentina.py +++ b/holidays/countries/argentina.py @@ -778,34 +778,19 @@ class ARG(Argentina): class ArgentinaIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2019, 2025) EID_AL_ADHA_DATES = { - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), - 2024: (JUN, 16), 2025: (JUN, 10), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2019, 2025) EID_AL_FITR_DATES = { - 2019: (JUN, 4), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), - 2023: (APR, 21), - 2024: (APR, 10), 2025: (MAR, 31), } + HIJRI_NEW_YEAR_DATES_CONFIRMED_YEARS = (2019, 2025) HIJRI_NEW_YEAR_DATES = { - 2019: (AUG, 31), - 2020: (AUG, 20), 2021: (AUG, 8), - 2022: (JUL, 30), - 2023: (JUL, 19), - 2024: (JUL, 7), - 2025: (JUN, 26), } diff --git a/holidays/countries/bahrain.py b/holidays/countries/bahrain.py index 1e6be7d9f..7eef6e1dc 100644 --- a/holidays/countries/bahrain.py +++ b/holidays/countries/bahrain.py @@ -13,7 +13,7 @@ from gettext import gettext as tr from holidays.calendars import _CustomIslamicHolidays -from holidays.calendars.gregorian import FRI, SAT, MAY, JUL, AUG, OCT +from holidays.calendars.gregorian import FRI, SAT from holidays.groups import InternationalHolidays, IslamicHolidays from holidays.holiday_base import HolidayBase @@ -92,22 +92,7 @@ class BAH(Bahrain): class BahrainIslamicHolidays(_CustomIslamicHolidays): - ASHURA_DATES = { - 2022: (AUG, 8), - } - - EID_AL_ADHA = { - 2022: (JUL, 9), - } - - EID_AL_FITR_DATES = { - 2022: (MAY, 2), - } - - HIJRI_NEW_YEAR_DATES = { - 2022: (JUL, 30), - } - - MAWLID_DATES = { - 2022: (OCT, 8), - } + ASHURA_DATES_CONFIRMED_YEARS = (2022, 2022) + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2022, 2022) + HIJRI_NEW_YEAR_DATES_CONFIRMED_YEARS = (2022, 2022) + MAWLID_DATES_CONFIRMED_YEARS = (2022, 2022) diff --git a/holidays/countries/bosnia_and_herzegovina.py b/holidays/countries/bosnia_and_herzegovina.py index 0750069e1..cfa8a888f 100644 --- a/holidays/countries/bosnia_and_herzegovina.py +++ b/holidays/countries/bosnia_and_herzegovina.py @@ -15,11 +15,8 @@ from holidays.calendars import _CustomIslamicHolidays from holidays.calendars.gregorian import ( GREGORIAN_CALENDAR, - JAN, FEB, MAR, - APR, - MAY, JUN, JUL, AUG, @@ -259,55 +256,33 @@ class BIH(BosniaAndHerzegovina): class BosniaAndHerzegovinaIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2001, 2023) EID_AL_ADHA_DATES = { 2001: (MAR, 6), 2002: (FEB, 23), 2003: (FEB, 12), 2004: (FEB, 2), - 2005: (JAN, 21), - 2006: ((JAN, 10), (DEC, 31)), - 2007: (DEC, 20), 2008: (DEC, 9), 2009: (NOV, 28), 2010: (NOV, 17), 2011: (NOV, 7), - 2012: (OCT, 26), - 2013: (OCT, 15), - 2014: (OCT, 4), 2015: (SEP, 24), 2016: (SEP, 13), 2017: (SEP, 2), 2018: (AUG, 22), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2001, 2024) EID_AL_FITR_DATES = { 2001: (DEC, 17), 2002: (DEC, 6), 2003: (NOV, 26), - 2004: (NOV, 14), 2005: (NOV, 4), 2006: (OCT, 24), - 2007: (OCT, 13), 2008: (OCT, 2), 2009: (SEP, 21), - 2010: (SEP, 10), 2011: (AUG, 31), - 2012: (AUG, 19), - 2013: (AUG, 8), - 2014: (JUL, 28), 2015: (JUL, 18), 2016: (JUL, 7), 2017: (JUN, 26), - 2018: (JUN, 15), - 2019: (JUN, 4), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), - 2023: (APR, 21), - 2024: (APR, 10), } diff --git a/holidays/countries/brunei.py b/holidays/countries/brunei.py index 0c1d5e692..6b649bb58 100644 --- a/holidays/countries/brunei.py +++ b/holidays/countries/brunei.py @@ -266,219 +266,109 @@ class BRN(Brunei): class BruneiIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (1998, 2025) EID_AL_ADHA_DATES = { - 1998: (APR, 7), 1999: (MAR, 28), 2000: (MAR, 17), 2001: (MAR, 6), 2002: (FEB, 23), 2003: (FEB, 12), 2004: (FEB, 2), - 2005: (JAN, 21), 2006: ((JAN, 11), (DEC, 31)), - 2007: (DEC, 20), - 2008: (DEC, 8), - 2009: (NOV, 27), - 2010: (NOV, 16), - 2011: (NOV, 6), - 2012: (OCT, 26), - 2013: (OCT, 15), 2014: (OCT, 5), 2015: (SEP, 24), 2016: (SEP, 12), - 2017: (SEP, 1), 2018: (AUG, 22), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), 2023: (JUN, 29), 2024: (JUN, 17), 2025: (JUN, 7), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (1998, 2025) EID_AL_FITR_DATES = { 1998: (JAN, 30), 1999: (JAN, 19), - 2000: ((JAN, 8), (DEC, 27)), - 2001: (DEC, 16), 2002: (DEC, 6), - 2003: (NOV, 25), - 2004: (NOV, 14), 2005: (NOV, 4), 2006: (OCT, 24), - 2007: (OCT, 13), - 2008: (OCT, 1), - 2009: (SEP, 20), - 2010: (SEP, 10), - 2011: (AUG, 30), - 2012: (AUG, 19), - 2013: (AUG, 8), - 2014: (JUL, 28), - 2015: (JUL, 17), - 2016: (JUL, 6), - 2017: (JUN, 25), - 2018: (JUN, 15), 2019: (JUN, 5), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), 2023: (APR, 22), - 2024: (APR, 10), 2025: (MAR, 31), } + HIJRI_NEW_YEAR_DATES_CONFIRMED_YEARS = (1998, 2025) HIJRI_NEW_YEAR_DATES = { 1998: (APR, 28), - 1999: (APR, 17), - 2000: (APR, 6), - 2001: (MAR, 26), - 2002: (MAR, 15), - 2003: (MAR, 4), 2004: (FEB, 22), - 2005: (FEB, 10), - 2006: (JAN, 31), - 2007: (JAN, 20), - 2008: ((JAN, 10), (DEC, 29)), - 2009: (DEC, 18), - 2010: (DEC, 7), 2011: (NOV, 27), - 2012: (NOV, 15), 2013: (NOV, 5), - 2014: (OCT, 25), - 2015: (OCT, 14), - 2016: (OCT, 2), 2017: (SEP, 22), - 2018: (SEP, 11), 2019: (SEP, 1), - 2020: (AUG, 20), 2021: (AUG, 10), - 2022: (JUL, 30), - 2023: (JUL, 19), - 2024: (JUL, 7), 2025: (JUN, 27), } + ISRA_AND_MIRAJ_DATES_CONFIRMED_YEARS = (1998, 2025) ISRA_AND_MIRAJ_DATES = { 1998: (NOV, 17), 1999: (NOV, 6), 2000: (OCT, 25), 2001: (OCT, 15), - 2002: (OCT, 4), - 2003: (SEP, 24), - 2004: (SEP, 12), - 2005: (SEP, 1), - 2006: (AUG, 21), 2007: (AUG, 11), - 2008: (JUL, 30), - 2009: (JUL, 20), 2010: (JUL, 10), - 2011: (JUN, 29), - 2012: (JUN, 17), - 2013: (JUN, 6), 2014: (MAY, 27), - 2015: (MAY, 16), 2016: (MAY, 5), - 2017: (APR, 24), 2018: (APR, 14), - 2019: (APR, 3), - 2020: (MAR, 22), - 2021: (MAR, 11), - 2022: (FEB, 28), - 2023: (FEB, 18), - 2024: (FEB, 8), - 2025: (JAN, 27), } + MAWLID_DATES_CONFIRMED_YEARS = (1998, 2025) MAWLID_DATES = { - 1998: (JUL, 6), - 1999: (JUN, 26), 2000: (JUN, 15), - 2001: (JUN, 4), 2002: (MAY, 25), 2003: (MAY, 14), 2004: (MAY, 2), - 2005: (APR, 21), 2006: (APR, 11), - 2007: (MAR, 31), - 2008: (MAR, 20), - 2009: (MAR, 9), - 2010: (FEB, 26), - 2011: (FEB, 15), 2012: (FEB, 5), - 2013: (JAN, 24), 2014: (JAN, 14), 2015: ((JAN, 3), (DEC, 24)), 2016: (DEC, 12), 2017: (DEC, 1), - 2018: (NOV, 20), - 2019: (NOV, 9), - 2020: (OCT, 29), 2021: (OCT, 19), - 2022: (OCT, 8), 2023: (SEP, 28), 2024: (SEP, 16), 2025: (SEP, 5), } + NUZUL_AL_QURAN_DATES_CONFIRMED_YEARS = (1998, 2025) NUZUL_AL_QURAN_DATES = { 1998: (JAN, 16), 1999: ((JAN, 5), (DEC, 25)), - 2000: (DEC, 13), 2001: (DEC, 3), - 2002: (NOV, 22), 2003: (NOV, 12), 2004: (NOV, 1), 2005: (OCT, 21), - 2006: (OCT, 10), - 2007: (SEP, 29), 2008: (SEP, 18), - 2009: (SEP, 7), - 2010: (AUG, 27), - 2011: (AUG, 17), 2012: (AUG, 6), 2013: (JUL, 26), 2014: (JUL, 15), - 2015: (JUL, 4), - 2016: (JUN, 22), - 2017: (JUN, 12), 2018: (JUN, 2), - 2019: (MAY, 22), - 2020: (MAY, 10), - 2021: (APR, 29), 2022: (APR, 19), - 2023: (APR, 8), 2024: (MAR, 28), 2025: (MAR, 18), } + RAMADAN_BEGINNING_DATES_CONFIRMED_YEARS = (1998, 2025) RAMADAN_BEGINNING_DATES = { 1998: (DEC, 20), - 1999: (DEC, 9), - 2000: (NOV, 27), 2001: (NOV, 17), - 2002: (NOV, 6), 2003: (OCT, 27), 2004: (OCT, 16), 2005: (OCT, 5), - 2006: (SEP, 24), - 2007: (SEP, 13), - 2008: (SEP, 1), - 2009: (AUG, 22), - 2010: (AUG, 11), - 2011: (AUG, 1), 2012: (JUL, 21), 2013: (JUL, 10), 2014: (JUN, 29), - 2015: (JUN, 18), - 2016: (JUN, 6), - 2017: (MAY, 27), 2018: (MAY, 17), - 2019: (MAY, 6), - 2020: (APR, 24), - 2021: (APR, 13), 2022: (APR, 3), - 2023: (MAR, 23), 2024: (MAR, 12), 2025: (MAR, 2), } diff --git a/holidays/countries/burkina_faso.py b/holidays/countries/burkina_faso.py index 8faf867ff..29ab091c7 100644 --- a/holidays/countries/burkina_faso.py +++ b/holidays/countries/burkina_faso.py @@ -11,7 +11,7 @@ # License: MIT (see LICENSE file) from holidays.calendars import _CustomIslamicHolidays -from holidays.calendars.gregorian import JAN, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC +from holidays.calendars.gregorian import JAN, JUN, JUL, SEP, OCT, NOV, DEC from holidays.groups import ChristianHolidays, InternationalHolidays, IslamicHolidays from holidays.observed_holiday_base import ObservedHolidayBase, SUN_TO_NEXT_MON @@ -104,33 +104,23 @@ class BFA(BurkinaFaso): class BurkinaFasoIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2014, 2023) EID_AL_ADHA_DATES = { 2014: (OCT, 5), 2015: (SEP, 24), 2016: (SEP, 13), 2017: (SEP, 2), - 2018: (AUG, 21), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2014, 2024) EID_AL_FITR_DATES = { 2014: (JUL, 29), 2015: (JUL, 18), 2016: (JUL, 7), 2017: (JUN, 26), - 2018: (JUN, 15), - 2019: (JUN, 4), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), - 2023: (APR, 21), - 2024: (APR, 10), } + MAWLID_DATES_CONFIRMED_YEARS = (2014, 2022) MAWLID_DATES = { 2014: (JAN, 14), 2015: ((JAN, 3), (DEC, 24)), @@ -138,7 +128,6 @@ class BurkinaFasoIslamicHolidays(_CustomIslamicHolidays): 2017: (DEC, 1), 2018: (NOV, 21), 2019: (NOV, 10), - 2020: (OCT, 29), 2021: (OCT, 19), 2022: (OCT, 9), } diff --git a/holidays/countries/cameroon.py b/holidays/countries/cameroon.py index 08e428600..4f7b559d5 100644 --- a/holidays/countries/cameroon.py +++ b/holidays/countries/cameroon.py @@ -104,82 +104,51 @@ class CMR(Cameroon): class CameroonIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2001, 2023) EID_AL_ADHA_DATES = { 2001: (MAR, 6), 2002: (FEB, 23), 2003: (FEB, 12), 2004: (FEB, 2), - 2005: (JAN, 21), - 2006: ((JAN, 10), (DEC, 31)), - 2007: (DEC, 20), 2008: (DEC, 9), 2009: (NOV, 28), 2010: (NOV, 17), 2011: (NOV, 7), - 2012: (OCT, 26), - 2013: (OCT, 15), 2014: (OCT, 5), 2015: (SEP, 24), 2016: (SEP, 13), 2017: (SEP, 2), - 2018: (AUG, 21), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2001, 2024) EID_AL_FITR_DATES = { 2001: (DEC, 17), 2002: (DEC, 6), 2003: (NOV, 26), - 2004: (NOV, 14), 2005: (NOV, 4), 2006: (OCT, 24), - 2007: (OCT, 13), 2008: (OCT, 2), 2009: (SEP, 21), - 2010: (SEP, 10), 2011: (AUG, 31), - 2012: (AUG, 19), - 2013: (AUG, 8), - 2014: (JUL, 28), 2015: (JUL, 18), 2016: (JUL, 7), 2017: (JUN, 26), - 2018: (JUN, 15), - 2019: (JUN, 4), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), - 2023: (APR, 21), - 2024: (APR, 10), } + MAWLID_DATES_CONFIRMED_YEARS = (2001, 2022) MAWLID_DATES = { - 2001: (JUN, 4), - 2002: (MAY, 24), 2003: (MAY, 14), 2004: (MAY, 2), - 2005: (APR, 21), 2006: (APR, 11), - 2007: (MAR, 31), - 2008: (MAR, 20), - 2009: (MAR, 9), - 2010: (FEB, 26), 2011: (FEB, 16), 2012: (FEB, 5), - 2013: (JAN, 24), 2014: (JAN, 14), 2015: ((JAN, 3), (DEC, 24)), 2016: (DEC, 12), 2017: (DEC, 1), 2018: (NOV, 21), 2019: (NOV, 10), - 2020: (OCT, 29), 2021: (OCT, 19), - 2022: (OCT, 8), } diff --git a/holidays/countries/central_african_republic.py b/holidays/countries/central_african_republic.py index 3bdb2fdb2..32c96b36f 100644 --- a/holidays/countries/central_african_republic.py +++ b/holidays/countries/central_african_republic.py @@ -13,7 +13,7 @@ from gettext import gettext as tr from holidays.calendars import _CustomIslamicHolidays -from holidays.calendars.gregorian import MAR, APR, MAY, JUN, JUL, AUG, SEP +from holidays.calendars.gregorian import JUN, JUL, SEP from holidays.groups import ChristianHolidays, InternationalHolidays, IslamicHolidays from holidays.holiday_base import HolidayBase @@ -114,30 +114,17 @@ class CAF(CentralAfricanRepublic): class CentralAfricanRepublicIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2015, 2025) EID_AL_ADHA_DATES = { 2015: (SEP, 24), 2016: (SEP, 13), 2017: (SEP, 2), - 2018: (AUG, 21), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), - 2024: (JUN, 16), 2025: (JUN, 7), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2015, 2025) EID_AL_FITR_DATES = { 2015: (JUL, 18), 2016: (JUL, 7), 2017: (JUN, 26), - 2018: (JUN, 15), - 2019: (JUN, 4), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), - 2023: (APR, 21), - 2024: (APR, 10), - 2025: (MAR, 30), } diff --git a/holidays/countries/chad.py b/holidays/countries/chad.py index 052987869..08269ba64 100644 --- a/holidays/countries/chad.py +++ b/holidays/countries/chad.py @@ -11,7 +11,7 @@ # License: MIT (see LICENSE file) from holidays.calendars import _CustomIslamicHolidays -from holidays.calendars.gregorian import JAN, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC +from holidays.calendars.gregorian import JAN, APR, JUN, JUL, AUG, SEP, NOV, DEC from holidays.groups import ( ChristianHolidays, InternationalHolidays, @@ -100,40 +100,27 @@ class TCD(Chad): class ChadIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2015, 2023) EID_AL_ADHA_DATES = { 2015: (SEP, 24), 2016: (SEP, 13), 2017: (SEP, 2), 2018: (AUG, 22), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2015, 2024) EID_AL_FITR_DATES = { 2015: (JUL, 18), 2016: (JUL, 7), 2017: (JUN, 26), - 2018: (JUN, 15), - 2019: (JUN, 4), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), - 2023: (APR, 21), - 2024: (APR, 10), } + MAWLID_DATES_CONFIRMED_YEARS = (2015, 2022) MAWLID_DATES = { 2015: ((JAN, 3), (DEC, 24)), 2016: (DEC, 12), 2017: (DEC, 1), 2018: (NOV, 21), - 2019: (NOV, 9), - 2020: (OCT, 29), - 2021: (OCT, 18), - 2022: (OCT, 8), } diff --git a/holidays/countries/christmas_island.py b/holidays/countries/christmas_island.py index faaadb508..60662be7b 100644 --- a/holidays/countries/christmas_island.py +++ b/holidays/countries/christmas_island.py @@ -13,7 +13,7 @@ from gettext import gettext as tr from holidays.calendars import _CustomChineseHolidays, _CustomIslamicHolidays -from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC +from holidays.calendars.gregorian import JAN, FEB, MAR, APR, JUN, JUL, AUG, SEP, OCT, NOV from holidays.groups import ( ChineseCalendarHolidays, ChristianHolidays, @@ -142,39 +142,27 @@ class ChristmasIslandChineseHolidays(_CustomChineseHolidays): class ChristmasIslandIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = ((2007, 2010), (2019, 2025)) EID_AL_ADHA_DATES = { - 2007: (DEC, 20), - 2008: (DEC, 8), 2009: (NOV, 30), - 2010: (NOV, 16), 2013: (OCT, 15), 2014: (OCT, 5), 2016: (SEP, 13), 2017: (SEP, 1), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), 2024: (JUN, 17), 2025: (JUN, 7), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = ((2007, 2010), (2019, 2025)) EID_AL_FITR_DATES = { 2007: (OCT, 15), - 2008: (OCT, 1), 2009: (SEP, 21), - 2010: (SEP, 10), 2013: (AUG, 8), 2014: (JUL, 28), 2016: (JUL, 6), 2017: (JUN, 24), 2019: (JUN, 5), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), 2023: (APR, 22), - 2024: (APR, 10), 2025: (MAR, 31), } diff --git a/holidays/countries/cocos_islands.py b/holidays/countries/cocos_islands.py index f07ba77bf..7a03c5e40 100644 --- a/holidays/countries/cocos_islands.py +++ b/holidays/countries/cocos_islands.py @@ -13,7 +13,7 @@ from gettext import gettext as tr from holidays.calendars import _CustomIslamicHolidays -from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC +from holidays.calendars.gregorian import JAN, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC from holidays.groups import ( ChristianHolidays, InternationalHolidays, @@ -167,47 +167,34 @@ def _populate_public_holidays(self): class CocosIslandsIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = ((2007, 2010), (2019, 2025)) EID_AL_ADHA_DATES = { - 2007: (DEC, 20), - 2008: (DEC, 8), 2009: (NOV, 30), - 2010: (NOV, 16), 2013: (OCT, 15), 2014: (OCT, 4), 2016: (SEP, 13), 2017: (SEP, 1), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), 2024: (JUN, 17), 2025: (JUN, 7), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = ((2007, 2010), (2019, 2025)) EID_AL_FITR_DATES = { 2007: (OCT, 15), - 2008: (OCT, 1), 2009: (SEP, 21), - 2010: (SEP, 10), 2013: (AUG, 8), 2014: (JUL, 28), 2016: (JUL, 6), 2017: (JUN, 24), 2019: (JUN, 5), - 2020: (MAY, 24), - 2021: (MAY, 13), 2022: (MAY, 3), - 2023: (APR, 21), - 2024: (APR, 10), 2025: (MAR, 31), } + HIJRI_NEW_YEAR_DATES_CONFIRMED_YEARS = (2007, 2010) HIJRI_NEW_YEAR_DATES = { 2007: (JAN, 22), 2008: (JAN, 10), - 2009: (DEC, 18), - 2010: (DEC, 7), 2013: (NOV, 4), 2014: (OCT, 25), 2016: (OCT, 3), @@ -215,20 +202,14 @@ class CocosIslandsIslamicHolidays(_CustomIslamicHolidays): 2019: (SEP, 1), } + MAWLID_DATES_CONFIRMED_YEARS = ((2007, 2010), (2019, 2025)) MAWLID_DATES = { 2007: (APR, 2), - 2008: (MAR, 20), - 2009: (MAR, 9), - 2010: (FEB, 26), 2013: (JAN, 24), 2014: (JAN, 13), 2016: (DEC, 12), 2017: (DEC, 1), - 2019: (NOV, 9), - 2020: (OCT, 29), 2021: (OCT, 19), - 2022: (OCT, 8), - 2023: (SEP, 27), 2024: (SEP, 16), 2025: (SEP, 5), } diff --git a/holidays/countries/egypt.py b/holidays/countries/egypt.py index f14773960..878d86139 100644 --- a/holidays/countries/egypt.py +++ b/holidays/countries/egypt.py @@ -13,23 +13,7 @@ from gettext import gettext as tr from holidays.calendars import _CustomIslamicHolidays -from holidays.calendars.gregorian import ( - JAN, - MAR, - APR, - MAY, - JUN, - JUL, - AUG, - SEP, - OCT, - MON, - TUE, - WED, - FRI, - SAT, - SUN, -) +from holidays.calendars.gregorian import JAN, APR, MAY, JUL, AUG, SEP, MON, TUE, WED, FRI, SAT, SUN from holidays.calendars.julian import JULIAN_CALENDAR from holidays.constants import GOVERNMENT, PUBLIC, SCHOOL from holidays.groups import ( @@ -183,40 +167,24 @@ class EGY(Egypt): class EgyptIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2020, 2025) EID_AL_ADHA_DATES = { - 2020: (JUL, 31), - 2021: (JUL, 20), 2022: (JUL, 10), - 2023: (JUN, 28), - 2024: (JUN, 16), - 2025: (JUN, 6), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2020, 2025) EID_AL_FITR_DATES = { - 2020: (MAY, 24), - 2021: (MAY, 13), 2022: (MAY, 1), - 2023: (APR, 21), - 2024: (APR, 10), - 2025: (MAR, 30), } + HIJRI_NEW_YEAR_DATES_CONFIRMED_YEARS = (2020, 2025) HIJRI_NEW_YEAR_DATES = { - 2020: (AUG, 20), 2021: (AUG, 11), - 2022: (JUL, 30), - 2023: (JUL, 19), - 2024: (JUL, 7), - 2025: (JUN, 26), } + MAWLID_DATES_CONFIRMED_YEARS = (2020, 2025) MAWLID_DATES = { - 2020: (OCT, 29), - 2021: (OCT, 18), - 2022: (OCT, 8), 2023: (SEP, 28), - 2024: (SEP, 15), - 2025: (SEP, 4), } diff --git a/holidays/countries/ethiopia.py b/holidays/countries/ethiopia.py index 29d30fa64..2551d0a2e 100644 --- a/holidays/countries/ethiopia.py +++ b/holidays/countries/ethiopia.py @@ -14,7 +14,7 @@ from gettext import gettext as tr from holidays.calendars import _CustomIslamicHolidays -from holidays.calendars.gregorian import JAN, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV +from holidays.calendars.gregorian import JAN, AUG, SEP, NOV from holidays.calendars.julian import JULIAN_CALENDAR from holidays.constants import PUBLIC, WORKDAY from holidays.groups import ChristianHolidays, InternationalHolidays, IslamicHolidays @@ -139,33 +139,15 @@ class ETH(Ethiopia): class EthiopiaIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2018, 2024) EID_AL_ADHA_DATES = { 2018: (AUG, 22), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), - 2024: (JUN, 16), } - EID_AL_FITR_DATES = { - 2018: (JUN, 15), - 2019: (JUN, 4), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), - 2023: (APR, 21), - 2024: (APR, 10), - 2025: (MAR, 30), - } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2018, 2025) + MAWLID_DATES_CONFIRMED_YEARS = (2018, 2024) MAWLID_DATES = { 2018: (NOV, 21), 2019: (NOV, 10), - 2020: (OCT, 29), - 2021: (OCT, 18), - 2022: (OCT, 8), - 2023: (SEP, 27), - 2024: (SEP, 15), } diff --git a/holidays/countries/fiji.py b/holidays/countries/fiji.py index 80f471539..05dc16924 100644 --- a/holidays/countries/fiji.py +++ b/holidays/countries/fiji.py @@ -169,13 +169,12 @@ class FijiHinduHolidays(_CustomHinduHolidays): class FijiIslamicHolidays(_CustomIslamicHolidays): + MAWLID_DATES_CONFIRMED_YEARS = (2016, 2025) MAWLID_DATES = { 2016: (DEC, 12), 2017: (DEC, 2), 2018: (NOV, 19), - 2019: (NOV, 9), 2020: (OCT, 31), - 2021: (OCT, 18), 2022: (OCT, 7), # looks like observed on FRI 2023: (SEP, 30), 2024: (SEP, 16), diff --git a/holidays/countries/gabon.py b/holidays/countries/gabon.py index 039097eaf..897512e08 100644 --- a/holidays/countries/gabon.py +++ b/holidays/countries/gabon.py @@ -11,7 +11,7 @@ # License: MIT (see LICENSE file) from holidays.calendars import _CustomIslamicHolidays -from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC +from holidays.calendars.gregorian import FEB, MAR, JUN, JUL, AUG, SEP, OCT, NOV, DEC from holidays.groups import ChristianHolidays, InternationalHolidays, IslamicHolidays from holidays.holiday_base import HolidayBase @@ -93,55 +93,35 @@ class GAB(Gabon): class GabonIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2001, 2023) EID_AL_ADHA_DATES = { 2001: (MAR, 6), 2002: (FEB, 23), 2003: (FEB, 12), 2004: (FEB, 2), - 2005: (JAN, 21), - 2006: ((JAN, 10), (DEC, 31)), - 2007: (DEC, 20), 2008: (DEC, 9), 2009: (NOV, 28), 2010: (NOV, 17), 2011: (NOV, 7), - 2012: (OCT, 26), - 2013: (OCT, 15), 2014: (OCT, 5), 2015: (SEP, 24), 2016: (SEP, 13), 2017: (SEP, 2), 2018: (AUG, 22), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2001, 2024) EID_AL_FITR_DATES = { 2001: (DEC, 17), 2002: (DEC, 6), 2003: (NOV, 26), - 2004: (NOV, 14), 2005: (NOV, 4), 2006: (OCT, 24), - 2007: (OCT, 13), 2008: (OCT, 2), 2009: (SEP, 21), - 2010: (SEP, 10), 2011: (AUG, 31), - 2012: (AUG, 19), - 2013: (AUG, 8), 2014: (JUL, 29), 2015: (JUL, 18), 2016: (JUL, 7), 2017: (JUN, 26), - 2018: (JUN, 15), - 2019: (JUN, 4), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), - 2023: (APR, 21), - 2024: (APR, 10), } diff --git a/holidays/countries/guinea.py b/holidays/countries/guinea.py index 389862ca7..1edaf250f 100644 --- a/holidays/countries/guinea.py +++ b/holidays/countries/guinea.py @@ -13,7 +13,7 @@ from gettext import gettext as tr from holidays.calendars import _CustomIslamicHolidays -from holidays.calendars.gregorian import MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC +from holidays.calendars.gregorian import MAR, APR, JUN, JUL, AUG, SEP, NOV, DEC from holidays.groups import ChristianHolidays, InternationalHolidays, IslamicHolidays from holidays.observed_holiday_base import ObservedHolidayBase, SUN_TO_NEXT_MON @@ -125,58 +125,36 @@ class GIN(Guinea): class GuineaIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2015, 2025) EID_AL_ADHA_DATES = { 2015: (SEP, 24), 2016: (SEP, 13), 2017: (SEP, 2), 2018: (AUG, 22), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), 2022: (JUL, 10), - 2023: (JUN, 28), - 2024: (JUN, 16), 2025: (JUN, 7), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2015, 2025) EID_AL_FITR_DATES = { 2015: (JUL, 18), 2016: (JUL, 7), 2017: (JUN, 26), - 2018: (JUN, 15), - 2019: (JUN, 4), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), - 2023: (APR, 21), - 2024: (APR, 10), 2025: (MAR, 31), } + MAWLID_DATES_CONFIRMED_YEARS = (2015, 2025) MAWLID_DATES = { 2015: (DEC, 24), 2016: (DEC, 12), 2017: (DEC, 1), - 2018: (NOV, 20), 2019: (NOV, 10), - 2020: (OCT, 29), - 2021: (OCT, 18), - 2022: (OCT, 8), - 2023: (SEP, 27), - 2024: (SEP, 15), 2025: (SEP, 5), } + LAYLAT_AL_QADR_DATES_CONFIRMED_YEARS = (2015, 2025) LAYLAT_AL_QADR_DATES = { - 2015: (JUL, 14), 2016: (JUL, 3), - 2017: (JUN, 22), 2018: (JUN, 12), - 2019: (JUN, 1), - 2020: (MAY, 20), - 2021: (MAY, 9), 2022: (APR, 29), - 2023: (APR, 18), - 2024: (APR, 6), - 2025: (MAR, 27), } diff --git a/holidays/countries/guyana.py b/holidays/countries/guyana.py index 4e294e604..5465da1a9 100644 --- a/holidays/countries/guyana.py +++ b/holidays/countries/guyana.py @@ -208,56 +208,41 @@ class GuyanaHinduHolidays(_CustomHinduHolidays): class GuyanaIslamicHolidays(_CustomIslamicHolidays): # https://web.archive.org/web/20250424074512/https://www.timeanddate.com/holidays/guyana/eid-al-adha + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2001, 2025) EID_AL_ADHA_DATES = { 2001: (MAR, 6), 2002: (FEB, 23), 2003: (FEB, 12), 2004: (FEB, 2), - 2005: (JAN, 21), - 2006: ((JAN, 10), (DEC, 31)), - 2007: (DEC, 20), 2008: (DEC, 9), 2009: (NOV, 28), 2010: (NOV, 17), 2011: (NOV, 7), - 2012: (OCT, 26), - 2013: (OCT, 15), 2014: (OCT, 5), 2015: (SEP, 24), 2016: (SEP, 13), 2017: (SEP, 2), 2018: (AUG, 22), - 2019: (AUG, 11), - 2020: (JUL, 31), 2021: (JUL, 21), - 2022: (JUL, 9), 2023: (JUN, 29), 2024: (JUN, 17), 2025: (JUN, 7), } # https://web.archive.org/web/20241006104125/https://www.timeanddate.com/holidays/guyana/prophet-birthday + MAWLID_DATES_CONFIRMED_YEARS = (2001, 2025) MAWLID_DATES = { - 2001: (JUN, 4), - 2002: (MAY, 24), 2003: (MAY, 14), 2004: (MAY, 2), - 2005: (APR, 21), 2006: (APR, 11), - 2007: (MAR, 31), - 2008: (MAR, 20), - 2009: (MAR, 9), - 2010: (FEB, 26), 2011: (FEB, 16), 2012: (FEB, 5), - 2013: (JAN, 24), 2014: (JAN, 14), 2015: ((JAN, 3), (DEC, 24)), 2016: (DEC, 12), 2017: (DEC, 1), 2018: (NOV, 21), 2019: (NOV, 10), - 2020: (OCT, 29), 2021: (OCT, 19), 2022: (OCT, 9), 2023: (SEP, 28), diff --git a/holidays/countries/india.py b/holidays/countries/india.py index 45875d4c7..2141e2d3a 100644 --- a/holidays/countries/india.py +++ b/holidays/countries/india.py @@ -501,17 +501,20 @@ def _populate_subdiv_wb_public_holidays(self): self._add_holiday_may_9(tr("Rabindra Jayanti")) +class IN(India): + pass + + +class IND(India): + pass + + class IndiaIslamicHolidays(_CustomIslamicHolidays): - # Muharram / Day of Ashura. + ASHURA_DATES_CONFIRMED_YEARS = (2001, 2025) ASHURA_DATES = { - 2001: (APR, 4), - 2002: (MAR, 24), 2003: (MAR, 14), 2004: (MAR, 2), - 2005: (FEB, 19), - 2006: (FEB, 9), 2007: (JAN, 30), - 2008: (JAN, 19), 2009: ((JAN, 7), (DEC, 28)), 2010: (DEC, 17), 2011: (DEC, 6), @@ -531,15 +534,13 @@ class IndiaIslamicHolidays(_CustomIslamicHolidays): 2025: (JUL, 6), } - # Bakrid / Eid-al-Adha. + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2001, 2025) EID_AL_ADHA_DATES = { 2001: (MAR, 6), 2002: (FEB, 23), 2003: (FEB, 12), 2004: (FEB, 2), - 2005: (JAN, 21), 2006: ((JAN, 11), (DEC, 31)), - 2007: (DEC, 20), 2008: (DEC, 9), 2009: (NOV, 28), 2010: (NOV, 17), @@ -560,21 +561,16 @@ class IndiaIslamicHolidays(_CustomIslamicHolidays): 2025: (JUN, 7), } - # Id-ul-Fitr / Eid-al-Fitr. + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2001, 2025) EID_AL_FITR_DATES = { 2001: (DEC, 17), 2002: (DEC, 6), 2003: (NOV, 26), - 2004: (NOV, 14), - 2005: (NOV, 3), 2006: (OCT, 24), - 2007: (OCT, 13), 2008: (OCT, 2), 2009: (SEP, 21), - 2010: (SEP, 10), 2011: (AUG, 31), 2012: (AUG, 20), - 2013: (AUG, 8), 2014: (JUL, 29), 2015: (JUL, 18), 2016: (JUL, 7), @@ -589,7 +585,7 @@ class IndiaIslamicHolidays(_CustomIslamicHolidays): 2025: (MAR, 31), } - # Milad-un-Nabi / Mawlid. + MAWLID_DATES_CONFIRMED_YEARS = (2001, 2025) MAWLID_DATES = { 2001: (JUN, 5), 2002: (MAY, 25), @@ -599,7 +595,6 @@ class IndiaIslamicHolidays(_CustomIslamicHolidays): 2006: (APR, 11), 2007: (APR, 1), 2008: (MAR, 21), - 2009: (MAR, 9), 2010: (FEB, 27), 2011: (FEB, 16), 2012: (FEB, 5), @@ -617,11 +612,3 @@ class IndiaIslamicHolidays(_CustomIslamicHolidays): 2024: (SEP, 16), 2025: (SEP, 5), } - - -class IN(India): - pass - - -class IND(India): - pass diff --git a/holidays/countries/indonesia.py b/holidays/countries/indonesia.py index 3fd540eea..a0ff3abf9 100644 --- a/holidays/countries/indonesia.py +++ b/holidays/countries/indonesia.py @@ -273,101 +273,65 @@ class IndonesiaChineseHolidays(_CustomChineseHolidays): class IndonesiaIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (1963, 2025) EID_AL_ADHA_DATES = { 1963: (MAY, 4), 1964: (APR, 23), 1965: (APR, 12), 1966: (APR, 2), 1967: (MAR, 22), - 1968: (MAR, 9), - 1969: (FEB, 27), 1970: (FEB, 17), - 1971: (FEB, 6), 1972: (JAN, 27), 1973: (JAN, 15), 1974: ((JAN, 4), (DEC, 24)), - 1975: (DEC, 13), 1976: (DEC, 2), - 1977: (NOV, 21), 1978: (NOV, 11), - 1979: (OCT, 31), - 1980: (OCT, 19), - 1981: (OCT, 8), 1982: (SEP, 28), - 1983: (SEP, 17), 1984: (SEP, 6), - 1985: (AUG, 26), 1986: (AUG, 16), 1987: (AUG, 5), 1988: (JUL, 24), - 1989: (JUL, 13), 1990: (JUL, 3), 1991: (JUN, 23), - 1992: (JUN, 11), 1993: (JUN, 1), 1994: (MAY, 21), 1995: (MAY, 10), 1996: (APR, 28), 1997: (APR, 18), - 1998: (APR, 7), 1999: (MAR, 28), - 2000: (MAR, 16), - 2001: (MAR, 5), 2002: (FEB, 23), 2003: (FEB, 12), 2004: (FEB, 2), - 2005: (JAN, 21), - 2006: ((JAN, 10), (DEC, 31)), - 2007: (DEC, 20), - 2008: (DEC, 8), - 2009: (NOV, 27), 2010: (NOV, 17), - 2011: (NOV, 6), - 2012: (OCT, 26), - 2013: (OCT, 15), 2014: (OCT, 5), 2015: (SEP, 24), 2016: (SEP, 12), - 2017: (SEP, 1), 2018: (AUG, 22), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), 2022: (JUL, 10), 2023: (JUN, 29), 2024: (JUN, 17), - 2025: (JUN, 6), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (1963, 2025) EID_AL_FITR_DATES = { 1963: (FEB, 25), 1964: (FEB, 15), 1965: (FEB, 3), 1966: (JAN, 23), - 1967: (JAN, 12), 1968: ((JAN, 2), (DEC, 21)), 1969: (DEC, 11), - 1970: (NOV, 30), - 1971: (NOV, 19), - 1972: (NOV, 7), - 1973: (OCT, 27), 1974: (OCT, 17), - 1975: (OCT, 6), 1976: (SEP, 25), 1977: (SEP, 15), 1978: (SEP, 4), 1979: (AUG, 24), - 1980: (AUG, 12), - 1981: (AUG, 1), 1982: (JUL, 22), 1983: (JUL, 12), - 1984: (JUN, 30), 1985: (JUN, 20), 1986: (JUN, 9), 1987: (MAY, 29), 1988: (MAY, 17), 1989: (MAY, 7), - 1990: (APR, 26), 1991: (APR, 16), 1992: (APR, 5), 1993: (MAR, 25), @@ -377,212 +341,114 @@ class IndonesiaIslamicHolidays(_CustomIslamicHolidays): 1997: (FEB, 9), 1998: (JAN, 30), 1999: (JAN, 19), - 2000: ((JAN, 8), (DEC, 27)), - 2001: (DEC, 16), 2002: (DEC, 6), - 2003: (NOV, 25), - 2004: (NOV, 14), - 2005: (NOV, 3), 2006: (OCT, 24), - 2007: (OCT, 13), - 2008: (OCT, 1), - 2009: (SEP, 20), - 2010: (SEP, 10), - 2011: (AUG, 30), - 2012: (AUG, 19), - 2013: (AUG, 8), - 2014: (JUL, 28), - 2015: (JUL, 17), - 2016: (JUL, 6), - 2017: (JUN, 25), - 2018: (JUN, 15), 2019: (JUN, 5), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), 2023: (APR, 22), - 2024: (APR, 10), 2025: (MAR, 31), } + HIJRI_NEW_YEAR_DATES_CONFIRMED_YEARS = (1968, 2025) HIJRI_NEW_YEAR_DATES = { - 1968: (MAR, 30), - 1969: (MAR, 19), 1970: (MAR, 10), 1971: (FEB, 27), - 1972: (FEB, 16), 1973: (FEB, 5), 1974: (JAN, 25), 1975: (JAN, 14), 1976: ((JAN, 3), (DEC, 22)), 1977: (DEC, 12), - 1978: (DEC, 1), 1979: (NOV, 21), - 1980: (NOV, 9), 1981: (OCT, 29), - 1982: (OCT, 18), 1983: (OCT, 8), - 1984: (SEP, 26), 1985: (SEP, 16), - 1986: (SEP, 5), 1987: (AUG, 26), 1988: (AUG, 14), 1989: (AUG, 3), - 1990: (JUL, 23), 1991: (JUL, 13), 1992: (JUL, 2), - 1993: (JUN, 21), 1994: (JUN, 11), 1995: (MAY, 31), 1996: (MAY, 19), 1997: (MAY, 8), 1998: (APR, 28), - 1999: (APR, 17), - 2000: (APR, 6), - 2001: (MAR, 26), - 2002: (MAR, 15), 2003: (MAR, 3), 2004: (FEB, 23), - 2005: (FEB, 10), - 2006: (JAN, 31), - 2007: (JAN, 20), - 2008: ((JAN, 10), (DEC, 29)), - 2009: (DEC, 18), - 2010: (DEC, 7), 2011: (NOV, 27), - 2012: (NOV, 15), 2013: (NOV, 5), - 2014: (OCT, 25), - 2015: (OCT, 14), - 2016: (OCT, 2), - 2017: (SEP, 21), - 2018: (SEP, 11), 2019: (SEP, 1), - 2020: (AUG, 20), 2021: (AUG, 11), - 2022: (JUL, 30), - 2023: (JUL, 19), - 2024: (JUL, 7), 2025: (JUN, 27), } + ISRA_AND_MIRAJ_DATES_CONFIRMED_YEARS = (1968, 2025) ISRA_AND_MIRAJ_DATES = { 1968: (OCT, 20), 1969: (OCT, 9), 1970: (SEP, 29), - 1971: (SEP, 17), 1972: (SEP, 6), 1973: (AUG, 26), 1974: (AUG, 16), - 1975: (AUG, 5), 1976: (JUL, 25), 1977: (JUL, 14), 1978: (JUL, 3), - 1979: (JUN, 22), 1980: (JUN, 11), - 1981: (MAY, 31), 1982: (MAY, 21), - 1983: (MAY, 10), 1984: (APR, 29), 1985: (APR, 18), 1986: (APR, 7), - 1987: (MAR, 27), 1988: (MAR, 16), - 1989: (MAR, 5), 1990: (FEB, 23), 1991: (FEB, 12), 1992: (FEB, 1), - 1993: (JAN, 20), 1994: ((JAN, 10), (DEC, 30)), 1995: (DEC, 20), - 1996: (DEC, 8), 1997: (NOV, 28), 1998: (NOV, 17), 1999: (NOV, 6), 2000: (OCT, 25), 2001: (OCT, 15), - 2002: (OCT, 4), 2003: (SEP, 22), 2004: (SEP, 13), 2005: (SEP, 2), - 2006: (AUG, 21), 2007: (AUG, 11), - 2008: (JUL, 30), - 2009: (JUL, 20), 2010: (JUL, 10), - 2011: (JUN, 29), - 2012: (JUN, 17), - 2013: (JUN, 6), 2014: (MAY, 27), - 2015: (MAY, 16), 2016: (MAY, 6), - 2017: (APR, 24), 2018: (APR, 14), - 2019: (APR, 3), - 2020: (MAR, 22), - 2021: (MAR, 11), - 2022: (FEB, 28), - 2023: (FEB, 18), - 2024: (FEB, 8), - 2025: (JAN, 27), } + MAWLID_DATES_CONFIRMED_YEARS = (1968, 2025) MAWLID_DATES = { - 1968: (JUN, 8), - 1969: (MAY, 28), - 1970: (MAY, 18), - 1971: (MAY, 7), 1972: (APR, 26), 1973: (APR, 14), 1974: (APR, 5), 1975: (MAR, 25), 1976: (MAR, 13), - 1977: (MAR, 2), 1978: (FEB, 20), - 1979: (FEB, 9), - 1980: (JAN, 30), - 1981: (JAN, 18), 1982: ((JAN, 8), (DEC, 28)), 1983: (DEC, 17), 1984: (DEC, 5), 1985: (NOV, 25), - 1986: (NOV, 14), 1987: (NOV, 4), 1988: (OCT, 23), 1989: (OCT, 12), - 1990: (OCT, 1), 1991: (SEP, 21), - 1992: (SEP, 9), 1993: (AUG, 30), 1994: (AUG, 20), 1995: (AUG, 9), 1996: (JUL, 28), 1997: (JUL, 17), - 1998: (JUL, 6), - 1999: (JUN, 26), 2000: (JUN, 15), - 2001: (JUN, 4), 2002: (MAY, 25), 2003: (MAY, 15), 2004: (MAY, 3), 2005: (APR, 22), - 2006: (APR, 10), - 2007: (MAR, 31), - 2008: (MAR, 20), - 2009: (MAR, 9), - 2010: (FEB, 26), - 2011: (FEB, 15), 2012: (FEB, 5), - 2013: (JAN, 24), 2014: (JAN, 14), 2015: ((JAN, 3), (DEC, 24)), 2016: (DEC, 12), 2017: (DEC, 1), - 2018: (NOV, 20), - 2019: (NOV, 9), - 2020: (OCT, 29), 2021: (OCT, 20), - 2022: (OCT, 8), 2023: (SEP, 28), 2024: (SEP, 16), 2025: (SEP, 5), diff --git a/holidays/countries/iran.py b/holidays/countries/iran.py index c9ea1b258..9bc7ec303 100644 --- a/holidays/countries/iran.py +++ b/holidays/countries/iran.py @@ -162,27 +162,23 @@ class IRN(Iran): class IranIslamicHolidays(_CustomIslamicHolidays): + ALI_AL_RIDA_DEATH_DATES_CONFIRMED_YEARS = (2001, 2025) ALI_AL_RIDA_DEATH_DATES = { 2001: (MAY, 24), 2002: (MAY, 13), 2003: (MAY, 2), 2004: (APR, 20), - 2005: (APR, 9), 2006: (MAR, 30), 2007: (MAR, 20), - 2008: (MAR, 8), 2009: (FEB, 26), 2010: (FEB, 15), 2011: (FEB, 4), 2012: (JAN, 24), - 2013: (JAN, 12), 2014: ((JAN, 2), (DEC, 23)), 2015: (DEC, 12), 2016: (NOV, 30), 2017: (NOV, 19), - 2018: (NOV, 8), 2019: (OCT, 29), - 2020: (OCT, 17), 2021: (OCT, 7), 2022: (SEP, 27), 2023: (SEP, 16), @@ -190,34 +186,27 @@ class IranIslamicHolidays(_CustomIslamicHolidays): 2025: (AUG, 24), } + ALI_BIRTHDAY_DATES_CONFIRMED_YEARS = (2001, 2025) ALI_BIRTHDAY_DATES = { 2001: (OCT, 1), 2002: (SEP, 21), - 2003: (SEP, 10), 2004: (AUG, 30), 2005: (AUG, 19), 2006: (AUG, 8), 2007: (JUL, 28), - 2008: (JUL, 16), - 2009: (JUL, 6), 2010: (JUN, 26), 2011: (JUN, 16), 2012: (JUN, 4), 2013: (MAY, 24), 2014: (MAY, 13), - 2015: (MAY, 2), 2016: (APR, 21), 2017: (APR, 11), 2018: (MAR, 31), - 2019: (MAR, 20), - 2020: (MAR, 8), - 2021: (FEB, 25), 2022: (FEB, 15), - 2023: (FEB, 4), - 2024: (JAN, 25), 2025: (JAN, 14), } + ALI_DEATH_DATES_CONFIRMED_YEARS = (2001, 2025) ALI_DEATH_DATES = { 2001: (DEC, 7), 2002: (NOV, 27), @@ -225,66 +214,48 @@ class IranIslamicHolidays(_CustomIslamicHolidays): 2004: (NOV, 5), 2005: (OCT, 25), 2006: (OCT, 15), - 2007: (OCT, 3), 2008: (SEP, 22), - 2009: (SEP, 11), 2010: (SEP, 1), - 2011: (AUG, 21), 2012: (AUG, 10), 2013: (JUL, 30), 2014: (JUL, 19), - 2015: (JUL, 8), 2016: (JUN, 27), - 2017: (JUN, 16), 2018: (JUN, 6), 2019: (MAY, 27), 2020: (MAY, 15), 2021: (MAY, 4), 2022: (APR, 23), - 2023: (APR, 12), 2024: (APR, 1), 2025: (MAR, 22), } + ARBAEEN_DATES_CONFIRMED_YEARS = (2001, 2025) ARBAEEN_DATES = { - 2001: (MAY, 14), - 2002: (MAY, 3), 2003: (APR, 23), 2004: (APR, 11), 2005: (MAR, 31), 2006: (MAR, 21), - 2007: (MAR, 10), 2008: (FEB, 28), 2009: (FEB, 16), 2010: (FEB, 5), 2011: (JAN, 25), - 2012: (JAN, 14), 2013: ((JAN, 3), (DEC, 23)), 2014: (DEC, 13), - 2015: (DEC, 2), - 2016: (NOV, 20), - 2017: (NOV, 9), 2018: (OCT, 30), - 2019: (OCT, 19), 2020: (OCT, 8), - 2021: (SEP, 27), 2022: (SEP, 17), 2023: (SEP, 6), 2024: (AUG, 25), - 2025: (AUG, 14), } + ASHURA_DATES_CONFIRMED_YEARS = (2001, 2025) ASHURA_DATES = { 2001: (APR, 5), 2002: (MAR, 25), 2003: (MAR, 14), 2004: (MAR, 2), 2005: (FEB, 20), - 2006: (FEB, 9), 2007: (JAN, 30), - 2008: (JAN, 19), - 2009: ((JAN, 7), (DEC, 27)), - 2010: (DEC, 16), 2011: (DEC, 6), 2012: (NOV, 25), 2013: (NOV, 14), @@ -292,149 +263,114 @@ class IranIslamicHolidays(_CustomIslamicHolidays): 2015: (OCT, 24), 2016: (OCT, 12), 2017: (OCT, 1), - 2018: (SEP, 20), 2019: (SEP, 10), 2020: (AUG, 30), 2021: (AUG, 19), - 2022: (AUG, 8), - 2023: (JUL, 28), - 2024: (JUL, 16), 2025: (JUL, 6), } + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2001, 2025) EID_AL_ADHA_DATES = { 2001: (MAR, 6), 2002: (FEB, 23), 2003: (FEB, 12), 2004: (FEB, 2), - 2005: (JAN, 21), 2006: ((JAN, 11), (DEC, 31)), 2007: (DEC, 21), 2008: (DEC, 9), 2009: (NOV, 28), 2010: (NOV, 17), 2011: (NOV, 7), - 2012: (OCT, 26), 2013: (OCT, 16), 2014: (OCT, 5), 2015: (SEP, 24), 2016: (SEP, 12), - 2017: (SEP, 1), 2018: (AUG, 22), 2019: (AUG, 12), - 2020: (JUL, 31), 2021: (JUL, 21), 2022: (JUL, 10), 2023: (JUN, 29), 2024: (JUN, 17), - 2025: (JUN, 6), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2001, 2025) EID_AL_FITR_DATES = { - 2001: (DEC, 16), 2002: (DEC, 6), 2003: (NOV, 26), - 2004: (NOV, 14), 2005: (NOV, 4), 2006: (OCT, 24), - 2007: (OCT, 13), - 2008: (OCT, 1), - 2009: (SEP, 20), - 2010: (SEP, 10), 2011: (AUG, 31), - 2012: (AUG, 19), 2013: (AUG, 9), 2014: (JUL, 29), 2015: (JUL, 18), - 2016: (JUL, 6), 2017: (JUN, 26), - 2018: (JUN, 15), 2019: (JUN, 5), - 2020: (MAY, 24), - 2021: (MAY, 13), 2022: (MAY, 3), 2023: (APR, 22), - 2024: (APR, 10), 2025: (MAR, 31), } + EID_AL_GHADIR_DATES_CONFIRMED_YEARS = (2001, 2025) EID_AL_GHADIR_DATES = { 2001: (MAR, 14), 2002: (MAR, 3), 2003: (FEB, 20), 2004: (FEB, 10), - 2005: (JAN, 29), 2006: (JAN, 19), 2007: ((JAN, 8), (DEC, 29)), 2008: (DEC, 17), 2009: (DEC, 6), 2010: (NOV, 25), 2011: (NOV, 15), - 2012: (NOV, 3), 2013: (OCT, 24), 2014: (OCT, 13), 2015: (OCT, 2), 2016: (SEP, 20), - 2017: (SEP, 9), 2018: (AUG, 30), 2019: (AUG, 20), - 2020: (AUG, 8), 2021: (JUL, 29), 2022: (JUL, 18), 2023: (JUL, 7), 2024: (JUN, 25), - 2025: (JUN, 14), } + FATIMA_DEATH_DATES_CONFIRMED_YEARS = (2001, 2025) FATIMA_DEATH_DATES = { 2001: (AUG, 23), - 2002: (AUG, 12), 2003: (AUG, 2), 2004: (JUL, 21), 2005: (JUL, 10), - 2006: (JUN, 29), - 2007: (JUN, 18), - 2008: (JUN, 7), 2009: (MAY, 28), - 2010: (MAY, 17), 2011: (MAY, 7), 2012: (APR, 25), 2013: (APR, 14), - 2014: (APR, 3), 2015: (MAR, 24), 2016: (MAR, 13), - 2017: (MAR, 2), 2018: (FEB, 20), 2019: (FEB, 9), 2020: (JAN, 29), 2021: (JAN, 17), - 2022: ((JAN, 6), (DEC, 27)), 2023: (DEC, 17), 2024: (DEC, 5), - 2025: (NOV, 24), } + HASAN_AL_ASKARI_DEATH_DATES_CONFIRMED_YEARS = (2001, 2025) HASAN_AL_ASKARI_DEATH_DATES = { 2001: (JUN, 1), 2002: (MAY, 21), 2003: (MAY, 10), 2004: (APR, 28), - 2005: (APR, 17), 2006: (APR, 7), 2007: (MAR, 28), - 2008: (MAR, 16), 2009: (MAR, 6), 2010: (FEB, 23), 2011: (FEB, 12), 2012: (FEB, 1), - 2013: (JAN, 20), 2014: ((JAN, 10), (DEC, 31)), 2015: (DEC, 20), 2016: (DEC, 8), 2017: (NOV, 27), - 2018: (NOV, 16), 2019: (NOV, 6), - 2020: (OCT, 25), 2021: (OCT, 15), 2022: (OCT, 5), 2023: (SEP, 24), @@ -442,6 +378,7 @@ class IranIslamicHolidays(_CustomIslamicHolidays): 2025: (SEP, 1), } + IMAM_MAHDI_BIRTHDAY_DATES_CONFIRMED_YEARS = (2001, 2025) IMAM_MAHDI_BIRTHDAY_DATES = { 2001: (NOV, 1), 2002: (OCT, 22), @@ -452,101 +389,72 @@ class IranIslamicHolidays(_CustomIslamicHolidays): 2007: (AUG, 29), 2008: (AUG, 17), 2009: (AUG, 7), - 2010: (JUL, 27), 2011: (JUL, 17), - 2012: (JUL, 5), - 2013: (JUN, 24), - 2014: (JUN, 13), 2015: (JUN, 3), - 2016: (MAY, 22), 2017: (MAY, 12), 2018: (MAY, 2), 2019: (APR, 21), 2020: (APR, 9), 2021: (MAR, 29), - 2022: (MAR, 18), 2023: (MAR, 8), - 2024: (FEB, 25), - 2025: (FEB, 14), } + ISRA_AND_MIRAJ_DATES_CONFIRMED_YEARS = (2001, 2025) ISRA_AND_MIRAJ_DATES = { 2001: (OCT, 15), 2002: (OCT, 5), - 2003: (SEP, 24), 2004: (SEP, 13), 2005: (SEP, 2), 2006: (AUG, 22), 2007: (AUG, 11), - 2008: (JUL, 30), - 2009: (JUL, 20), 2010: (JUL, 10), 2011: (JUN, 30), 2012: (JUN, 18), 2013: (JUN, 7), 2014: (MAY, 27), - 2015: (MAY, 16), 2016: (MAY, 5), 2017: (APR, 25), 2018: (APR, 14), - 2019: (APR, 3), - 2020: (MAR, 22), - 2021: (MAR, 11), 2022: (MAR, 1), - 2023: (FEB, 18), - 2024: (FEB, 8), 2025: (JAN, 28), } + PROPHET_DEATH_DATES_CONFIRMED_YEARS = (2001, 2025) PROPHET_DEATH_DATES = { - 2001: (MAY, 22), - 2002: (MAY, 11), 2003: (MAY, 1), 2004: (APR, 19), 2005: (APR, 8), 2006: (MAR, 29), - 2007: (MAR, 18), 2008: (MAR, 7), 2009: (FEB, 24), 2010: (FEB, 13), 2011: (FEB, 2), - 2012: (JAN, 22), 2013: ((JAN, 11), (DEC, 31)), 2014: (DEC, 21), - 2015: (DEC, 10), - 2016: (NOV, 28), - 2017: (NOV, 17), 2018: (NOV, 7), - 2019: (OCT, 27), 2020: (OCT, 16), - 2021: (OCT, 5), 2022: (SEP, 25), 2023: (SEP, 14), 2024: (SEP, 2), - 2025: (AUG, 22), } + SADIQ_BIRTHDAY_DATES_CONFIRMED_YEARS = (2001, 2025) SADIQ_BIRTHDAY_DATES = { 2001: (JUN, 10), 2002: (MAY, 30), 2003: (MAY, 19), 2004: (MAY, 7), - 2005: (APR, 26), 2006: (APR, 16), 2007: (APR, 6), - 2008: (MAR, 25), 2009: (MAR, 15), 2010: (MAR, 4), 2011: (FEB, 21), 2012: (FEB, 10), - 2013: (JAN, 29), 2014: (JAN, 19), 2015: ((JAN, 9), (DEC, 29)), 2016: (DEC, 17), 2017: (DEC, 6), - 2018: (NOV, 25), 2019: (NOV, 15), - 2020: (NOV, 3), 2021: (OCT, 24), 2022: (OCT, 14), 2023: (OCT, 3), @@ -554,45 +462,31 @@ class IranIslamicHolidays(_CustomIslamicHolidays): 2025: (SEP, 10), } + SADIQ_DEATH_DATES_CONFIRMED_YEARS = (2001, 2025) SADIQ_DEATH_DATES = { - 2001: (JAN, 20), 2002: ((JAN, 9), (DEC, 30)), 2003: (DEC, 20), - 2004: (DEC, 8), 2005: (NOV, 28), 2006: (NOV, 17), - 2007: (NOV, 6), - 2008: (OCT, 25), - 2009: (OCT, 14), - 2010: (OCT, 4), 2011: (SEP, 24), - 2012: (SEP, 12), 2013: (SEP, 2), 2014: (AUG, 22), 2015: (AUG, 11), - 2016: (JUL, 30), 2017: (JUL, 20), - 2018: (JUL, 9), 2019: (JUN, 29), - 2020: (JUN, 17), - 2021: (JUN, 6), 2022: (MAY, 27), 2023: (MAY, 16), - 2024: (MAY, 4), 2025: (APR, 24), } + TASUA_DATES_CONFIRMED_YEARS = (2001, 2025) TASUA_DATES = { 2001: (APR, 4), 2002: (MAR, 24), 2003: (MAR, 13), 2004: (MAR, 1), 2005: (FEB, 19), - 2006: (FEB, 8), 2007: (JAN, 29), - 2008: (JAN, 18), - 2009: ((JAN, 6), (DEC, 26)), - 2010: (DEC, 15), 2011: (DEC, 5), 2012: (NOV, 24), 2013: (NOV, 13), @@ -600,12 +494,8 @@ class IranIslamicHolidays(_CustomIslamicHolidays): 2015: (OCT, 23), 2016: (OCT, 11), 2017: (SEP, 30), - 2018: (SEP, 19), 2019: (SEP, 9), 2020: (AUG, 29), 2021: (AUG, 18), - 2022: (AUG, 7), - 2023: (JUL, 27), - 2024: (JUL, 15), 2025: (JUL, 5), } diff --git a/holidays/countries/kazakhstan.py b/holidays/countries/kazakhstan.py index 1b771fcdd..4011054bb 100644 --- a/holidays/countries/kazakhstan.py +++ b/holidays/countries/kazakhstan.py @@ -13,7 +13,7 @@ from gettext import gettext as tr from holidays.calendars import _CustomIslamicHolidays -from holidays.calendars.gregorian import JAN, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC +from holidays.calendars.gregorian import JAN, MAR, APR, MAY, JUL, AUG, SEP, OCT, DEC from holidays.calendars.julian import JULIAN_CALENDAR from holidays.groups import ( ChristianHolidays, @@ -146,27 +146,11 @@ class KAZ(Kazakhstan): class KazakhstanIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2006, 2025) EID_AL_ADHA_DATES = { 2006: (JAN, 10), - 2007: (DEC, 20), - 2008: (DEC, 8), - 2009: (NOV, 27), - 2010: (NOV, 16), - 2011: (NOV, 6), - 2012: (OCT, 26), - 2013: (OCT, 15), - 2014: (OCT, 4), 2015: (SEP, 24), 2016: (SEP, 12), - 2017: (SEP, 1), - 2018: (AUG, 21), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), - 2024: (JUN, 16), - 2025: (JUN, 6), } diff --git a/holidays/countries/kenya.py b/holidays/countries/kenya.py index ad1aa44ab..7bbead66b 100644 --- a/holidays/countries/kenya.py +++ b/holidays/countries/kenya.py @@ -174,32 +174,26 @@ class KenyaHinduHolidays(_CustomHinduHolidays): class KenyaIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2014, 2024) EID_AL_ADHA_DATES = { 2014: (OCT, 6), 2015: (SEP, 24), 2016: (SEP, 12), - 2017: (SEP, 1), - 2018: (AUG, 21), 2019: (AUG, 12), - 2020: (JUL, 31), - 2021: (JUL, 20), 2022: (JUL, 11), - 2023: (JUN, 28), 2024: (JUN, 17), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2014, 2024) EID_AL_FITR_DATES = { 2014: (JUL, 29), 2015: (JUL, 18), 2016: (JUL, 7), 2017: (JUN, 26), - 2018: (JUN, 15), 2019: (JUN, 5), 2020: (MAY, 25), 2021: (MAY, 14), 2022: (MAY, 3), - 2023: (APR, 21), - 2024: (APR, 10), } diff --git a/holidays/countries/lebanon.py b/holidays/countries/lebanon.py index 0fab16d1f..4b10aa4f6 100644 --- a/holidays/countries/lebanon.py +++ b/holidays/countries/lebanon.py @@ -190,10 +190,10 @@ class LBN(Lebanon): class LebanonIslamicHolidays(_CustomIslamicHolidays): # https://web.archive.org/web/20250426220233/https://www.timeanddate.com/holidays/lebanon/first-day-ashura + ASHURA_DATES_CONFIRMED_YEARS = (1978, 2024) ASHURA_DATES = { 1978: (DEC, 11), 1979: (NOV, 30), - 1980: (NOV, 18), 1981: (NOV, 8), 1982: (OCT, 28), 1983: (OCT, 17), @@ -206,28 +206,15 @@ class LebanonIslamicHolidays(_CustomIslamicHolidays): 1990: (AUG, 2), 1991: (JUL, 22), 1992: (JUL, 11), - 1993: (JUN, 30), - 1994: (JUN, 19), 1995: (JUN, 9), 1996: (MAY, 28), 1997: (MAY, 18), 1998: (MAY, 7), - 1999: (APR, 26), - 2000: (APR, 15), - 2001: (APR, 4), - 2002: (MAR, 24), 2003: (MAR, 14), 2004: (MAR, 2), - 2005: (FEB, 19), - 2006: (FEB, 9), - 2007: (JAN, 29), - 2008: (JAN, 19), - 2009: ((JAN, 7), (DEC, 27)), 2010: (DEC, 17), 2011: (DEC, 6), - 2012: (NOV, 24), 2013: (NOV, 14), - 2014: (NOV, 3), 2015: (OCT, 24), 2016: (OCT, 12), 2017: (OCT, 1), @@ -236,11 +223,10 @@ class LebanonIslamicHolidays(_CustomIslamicHolidays): 2020: (AUG, 30), 2021: (AUG, 19), 2022: (AUG, 9), - 2023: (JUL, 28), - 2024: (JUL, 16), } # https://web.archive.org/web/20250316072400/https://www.timeanddate.com/holidays/lebanon/eid-al-adha + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (1978, 2025) EID_AL_ADHA_DATES = { 1978: (NOV, 11), 1979: (NOV, 1), @@ -256,7 +242,6 @@ class LebanonIslamicHolidays(_CustomIslamicHolidays): 1989: (JUL, 14), 1990: (JUL, 4), 1991: (JUN, 23), - 1992: (JUN, 11), 1993: (JUN, 1), 1994: (MAY, 21), 1995: (MAY, 10), @@ -264,35 +249,24 @@ class LebanonIslamicHolidays(_CustomIslamicHolidays): 1997: (APR, 18), 1998: (APR, 8), 1999: (MAR, 28), - 2000: (MAR, 16), 2001: (MAR, 6), 2002: (FEB, 23), 2003: (FEB, 12), 2004: (FEB, 2), - 2005: (JAN, 21), - 2006: ((JAN, 10), (DEC, 31)), - 2007: (DEC, 20), 2008: (DEC, 9), 2009: (NOV, 28), 2010: (NOV, 17), 2011: (NOV, 7), - 2012: (OCT, 26), - 2013: (OCT, 15), 2014: (OCT, 5), 2015: (SEP, 24), 2016: (SEP, 13), 2017: (SEP, 2), 2018: (AUG, 22), 2019: (AUG, 12), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), - 2024: (JUN, 16), - 2025: (JUN, 6), } # https://web.archive.org/web/20250216042303/https://www.timeanddate.com/holidays/lebanon/eid-al-fitr + EID_AL_FITR_DATES_CONFIRMED_YEARS = (1978, 2025) EID_AL_FITR_DATES = { 1978: (SEP, 4), 1979: (AUG, 25), @@ -300,7 +274,6 @@ class LebanonIslamicHolidays(_CustomIslamicHolidays): 1981: (AUG, 2), 1982: (JUL, 23), 1983: (JUL, 12), - 1984: (JUN, 30), 1985: (JUN, 20), 1986: (JUN, 9), 1987: (MAY, 30), @@ -308,7 +281,6 @@ class LebanonIslamicHolidays(_CustomIslamicHolidays): 1989: (MAY, 7), 1990: (APR, 27), 1991: (APR, 16), - 1992: (APR, 4), 1993: (MAR, 25), 1994: (MAR, 14), 1995: (MAR, 3), @@ -320,35 +292,21 @@ class LebanonIslamicHolidays(_CustomIslamicHolidays): 2001: (DEC, 17), 2002: (DEC, 6), 2003: (NOV, 26), - 2004: (NOV, 14), 2005: (NOV, 4), 2006: (OCT, 24), - 2007: (OCT, 13), 2008: (OCT, 2), 2009: (SEP, 21), - 2010: (SEP, 10), 2011: (AUG, 31), - 2012: (AUG, 19), - 2013: (AUG, 8), 2014: (JUL, 29), - 2015: (JUL, 17), 2016: (JUL, 7), 2017: (JUN, 26), - 2018: (JUN, 15), - 2019: (JUN, 4), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), - 2023: (APR, 21), - 2024: (APR, 10), - 2025: (MAR, 30), } # https://web.archive.org/web/20250428034326/https://www.timeanddate.com/holidays/lebanon/muharram + HIJRI_NEW_YEAR_DATES_CONFIRMED_YEARS = (1978, 2025) HIJRI_NEW_YEAR_DATES = { 1978: (DEC, 2), 1979: (NOV, 21), - 1980: (NOV, 9), 1981: (OCT, 30), 1982: (OCT, 19), 1983: (OCT, 8), @@ -361,47 +319,24 @@ class LebanonIslamicHolidays(_CustomIslamicHolidays): 1990: (JUL, 24), 1991: (JUL, 13), 1992: (JUL, 2), - 1993: (JUN, 21), - 1994: (JUN, 10), 1995: (MAY, 31), 1996: (MAY, 19), 1997: (MAY, 9), 1998: (APR, 28), - 1999: (APR, 17), - 2000: (APR, 6), - 2001: (MAR, 26), - 2002: (MAR, 15), 2003: (MAR, 5), 2004: (FEB, 22), - 2005: (FEB, 10), - 2006: (JAN, 31), - 2007: (JAN, 20), - 2008: ((JAN, 10), (DEC, 29)), - 2009: (DEC, 18), 2010: (DEC, 8), 2011: (NOV, 27), - 2012: (NOV, 15), 2013: (NOV, 5), - 2014: (OCT, 25), - 2015: (OCT, 14), 2016: (OCT, 3), 2017: (SEP, 22), - 2018: (SEP, 11), - 2019: (AUG, 31), - 2020: (AUG, 20), - 2021: (AUG, 9), - 2022: (JUL, 30), - 2023: (JUL, 19), - 2024: (JUL, 7), - 2025: (JUN, 26), } # https://web.archive.org/web/20240908071444/https://www.timeanddate.com/holidays/lebanon/prophet-birthday + MAWLID_DATES_CONFIRMED_YEARS = (1978, 2024) MAWLID_DATES = { 1978: (FEB, 20), 1979: (FEB, 10), - 1980: (JAN, 30), - 1981: (JAN, 18), 1982: ((JAN, 8), (DEC, 28)), 1983: (DEC, 17), 1984: (DEC, 6), @@ -414,35 +349,18 @@ class LebanonIslamicHolidays(_CustomIslamicHolidays): 1991: (SEP, 21), 1992: (SEP, 10), 1993: (AUG, 30), - 1994: (AUG, 19), 1995: (AUG, 9), 1996: (JUL, 28), 1997: (JUL, 18), 1998: (JUL, 7), - 1999: (JUN, 26), 2000: (JUN, 15), - 2001: (JUN, 4), - 2002: (MAY, 24), 2003: (MAY, 14), 2004: (MAY, 2), - 2005: (APR, 21), 2006: (APR, 11), - 2007: (MAR, 31), - 2008: (MAR, 20), - 2009: (MAR, 9), - 2010: (FEB, 26), 2011: (FEB, 16), 2012: (FEB, 5), - 2013: (JAN, 24), 2014: (JAN, 14), 2015: ((JAN, 3), (DEC, 24)), 2016: (DEC, 12), 2017: (DEC, 1), - 2018: (NOV, 20), - 2019: (NOV, 9), - 2020: (OCT, 29), - 2021: (OCT, 18), - 2022: (OCT, 8), - 2023: (SEP, 27), - 2024: (SEP, 15), } diff --git a/holidays/countries/libya.py b/holidays/countries/libya.py index d9b398a0e..aa408246c 100644 --- a/holidays/countries/libya.py +++ b/holidays/countries/libya.py @@ -13,7 +13,7 @@ from gettext import gettext as tr from holidays.calendars import _CustomIslamicHolidays -from holidays.calendars.gregorian import JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC +from holidays.calendars.gregorian import JAN, FEB, MAR, JUN, JUL, AUG, SEP, OCT, NOV, DEC from holidays.constants import PUBLIC, WORKDAY from holidays.groups import InternationalHolidays, IslamicHolidays, StaticHolidays from holidays.holiday_base import HolidayBase @@ -142,75 +142,43 @@ class LBY(Libya): class LibyaIslamicHolidays(_CustomIslamicHolidays): # https://web.archive.org/web/20240908234803/https://www.timeanddate.com/holidays/libya/eid-al-adha # https://web.archive.org/web/20250629084537/https://lawsociety.ly/legislation/قرار-رقم-773-لسنة-2017-م-بشأن-تحديد-عطلة-عيد-ال/ + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2012, 2025) EID_AL_ADHA_DATES = { - 2012: (OCT, 26), - 2013: (OCT, 15), 2014: (OCT, 5), - 2015: (SEP, 23), - 2016: (SEP, 11), - 2017: (SEP, 1), 2018: (AUG, 22), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), - 2024: (JUN, 16), - 2025: (JUN, 6), } # https://web.archive.org/web/20241012125707/https://www.timeanddate.com/holidays/libya/eid-al-fitr + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2012, 2025) EID_AL_FITR_DATES = { - 2012: (AUG, 19), - 2013: (AUG, 8), 2014: (JUL, 29), 2015: (JUL, 18), 2016: (JUL, 7), 2017: (JUN, 26), - 2018: (JUN, 15), - 2019: (JUN, 4), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), - 2023: (APR, 21), - 2024: (APR, 10), 2025: (MAR, 31), } # https://web.archive.org/web/20250418094505/https://www.timeanddate.com/holidays/libya/muharram-new-year + HIJRI_NEW_YEAR_DATES_CONFIRMED_YEARS = (2012, 2025) HIJRI_NEW_YEAR_DATES = { - 2012: (NOV, 15), 2013: (NOV, 5), - 2014: (OCT, 25), 2015: (OCT, 15), 2016: (OCT, 3), 2017: (SEP, 22), 2018: (SEP, 12), - 2019: (AUG, 31), - 2020: (AUG, 20), 2021: (AUG, 10), - 2022: (JUL, 30), - 2023: (JUL, 19), - 2024: (JUL, 7), - 2025: (JUN, 26), } # https://web.archive.org/web/20241213175353/https://www.timeanddate.com/holidays/libya/prophet-birthday # https://web.archive.org/web/20250629084607/https://lawsociety.ly/legislation/قرار-رقم-1299-لسنة-2019-م-بشأن-عطلة-ذكرى-المولد/ + MAWLID_DATES_CONFIRMED_YEARS = (2012, 2024) MAWLID_DATES = { 2012: (FEB, 5), - 2013: (JAN, 24), 2014: (JAN, 14), - 2015: ((JAN, 3), (DEC, 23)), 2016: (DEC, 12), 2017: (DEC, 1), 2018: (NOV, 21), - 2019: (NOV, 9), - 2020: (OCT, 29), 2021: (OCT, 19), - 2022: (OCT, 8), - 2023: (SEP, 27), - 2024: (SEP, 15), } diff --git a/holidays/countries/malaysia.py b/holidays/countries/malaysia.py index 8d2d196be..ba24c16e7 100644 --- a/holidays/countries/malaysia.py +++ b/holidays/countries/malaysia.py @@ -682,62 +682,39 @@ class MalaysiaHinduHolidays(_CustomHinduHolidays): class MalaysiaIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2001, 2025) EID_AL_ADHA_DATES = { 2001: (MAR, 6), 2002: (FEB, 23), 2003: (FEB, 12), 2004: (FEB, 2), - 2005: (JAN, 21), - 2006: ((JAN, 10), (DEC, 31)), - 2007: (DEC, 20), 2008: (DEC, 9), 2009: (NOV, 28), 2010: (NOV, 17), 2011: (NOV, 7), - 2012: (OCT, 26), - 2013: (OCT, 15), 2014: (OCT, 5), 2015: (SEP, 24), 2016: (SEP, 12), - 2017: (SEP, 1), 2018: (AUG, 22), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), 2022: (JUL, 10), 2023: (JUN, 29), 2024: (JUN, 17), 2025: (JUN, 7), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2001, 2025) EID_AL_FITR_DATES = { 2001: (DEC, 17), 2002: (DEC, 6), 2003: (NOV, 26), - 2004: (NOV, 14), - 2005: (NOV, 3), 2006: (OCT, 24), - 2007: (OCT, 13), - 2008: (OCT, 1), - 2009: (SEP, 20), - 2010: (SEP, 10), 2011: (AUG, 31), - 2012: (AUG, 19), - 2013: (AUG, 8), - 2014: (JUL, 28), - 2015: (JUL, 17), - 2016: (JUL, 6), - 2017: (JUN, 25), - 2018: (JUN, 15), 2019: (JUN, 5), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), 2023: (APR, 22), - 2024: (APR, 10), 2025: (MAR, 31), } + HARI_HOL_JOHOR_DATES_CONFIRMED_YEARS = (2011, 2025) HARI_HOL_JOHOR_DATES = { 2011: (JAN, 12), 2012: (DEC, 20), @@ -746,93 +723,48 @@ class MalaysiaIslamicHolidays(_CustomIslamicHolidays): 2015: (NOV, 19), 2016: (NOV, 7), 2017: (OCT, 27), - 2018: (OCT, 15), - 2019: (OCT, 5), 2020: (SEP, 24), - 2021: (SEP, 13), 2022: (SEP, 3), 2023: (AUG, 23), 2024: (AUG, 11), - 2025: (JUL, 31), } + HIJRI_NEW_YEAR_DATES_CONFIRMED_YEARS = (2001, 2025) HIJRI_NEW_YEAR_DATES = { - 2001: (MAR, 26), - 2002: (MAR, 15), 2003: (MAR, 5), 2004: (FEB, 22), - 2005: (FEB, 10), - 2006: (JAN, 31), - 2007: (JAN, 20), - 2008: ((JAN, 10), (DEC, 29)), - 2009: (DEC, 18), 2010: (DEC, 8), 2011: (NOV, 27), - 2012: (NOV, 15), 2013: (NOV, 5), - 2014: (OCT, 25), - 2015: (OCT, 14), - 2016: (OCT, 2), 2017: (SEP, 22), - 2018: (SEP, 11), 2019: (SEP, 1), - 2020: (AUG, 20), 2021: (AUG, 10), - 2022: (JUL, 30), - 2023: (JUL, 19), - 2024: (JUL, 7), 2025: (JUN, 27), } + ISRA_AND_MIRAJ_DATES_CONFIRMED_YEARS = (2001, 2025) ISRA_AND_MIRAJ_DATES = { 2001: (OCT, 15), - 2002: (OCT, 4), - 2003: (SEP, 24), - 2004: (SEP, 12), - 2005: (SEP, 1), 2006: (AUG, 22), 2007: (AUG, 11), 2008: (JUL, 31), - 2009: (JUL, 20), - 2010: (JUL, 9), - 2011: (JUN, 29), - 2012: (JUN, 17), - 2013: (JUN, 6), 2014: (MAY, 27), - 2015: (MAY, 16), 2016: (MAY, 5), - 2017: (APR, 24), 2018: (APR, 14), - 2019: (APR, 3), - 2020: (MAR, 22), - 2021: (MAR, 11), 2022: (MAR, 1), - 2023: (FEB, 18), - 2024: (FEB, 8), - 2025: (JAN, 27), } + MAWLID_DATES_CONFIRMED_YEARS = (2001, 2025) MAWLID_DATES = { - 2001: (JUN, 4), - 2002: (MAY, 24), 2003: (MAY, 14), 2004: (MAY, 2), - 2005: (APR, 21), 2006: (APR, 11), - 2007: (MAR, 31), - 2008: (MAR, 20), - 2009: (MAR, 9), - 2010: (FEB, 26), 2011: (FEB, 16), 2012: (FEB, 5), - 2013: (JAN, 24), 2014: (JAN, 14), 2015: ((JAN, 3), (DEC, 24)), 2016: (DEC, 12), 2017: (DEC, 1), - 2018: (NOV, 20), - 2019: (NOV, 9), - 2020: (OCT, 29), 2021: (OCT, 19), 2022: (OCT, 10), 2023: (SEP, 28), @@ -840,58 +772,31 @@ class MalaysiaIslamicHolidays(_CustomIslamicHolidays): 2025: (SEP, 5), } + NUZUL_AL_QURAN_DATES_CONFIRMED_YEARS = (2001, 2025) NUZUL_AL_QURAN_DATES = { 2001: (DEC, 3), - 2002: (NOV, 22), 2003: (NOV, 12), 2004: (NOV, 1), 2005: (OCT, 21), - 2006: (OCT, 10), - 2007: (SEP, 29), 2008: (SEP, 18), - 2009: (SEP, 7), - 2010: (AUG, 27), - 2011: (AUG, 17), - 2012: (AUG, 5), - 2013: (JUL, 25), 2014: (JUL, 15), - 2015: (JUL, 4), - 2016: (JUN, 22), - 2017: (JUN, 12), 2018: (JUN, 2), - 2019: (MAY, 22), - 2020: (MAY, 10), - 2021: (APR, 29), 2022: (APR, 19), - 2023: (APR, 8), 2024: (MAR, 28), 2025: (MAR, 18), } + RAMADAN_BEGINNING_DATES_CONFIRMED_YEARS = (2001, 2025) RAMADAN_BEGINNING_DATES = { 2001: (NOV, 17), - 2002: (NOV, 6), 2003: (OCT, 27), 2004: (OCT, 16), 2005: (OCT, 5), - 2006: (SEP, 24), - 2007: (SEP, 13), 2008: (SEP, 2), - 2009: (AUG, 22), - 2010: (AUG, 11), - 2011: (AUG, 1), - 2012: (JUL, 20), - 2013: (JUL, 9), 2014: (JUN, 29), - 2015: (JUN, 18), 2016: (JUN, 7), - 2017: (MAY, 27), 2018: (MAY, 17), - 2019: (MAY, 6), - 2020: (APR, 24), - 2021: (APR, 13), 2022: (APR, 3), - 2023: (MAR, 23), 2024: (MAR, 12), 2025: (MAR, 2), } diff --git a/holidays/countries/mali.py b/holidays/countries/mali.py index f281a9a46..93619a6c5 100644 --- a/holidays/countries/mali.py +++ b/holidays/countries/mali.py @@ -13,7 +13,7 @@ from gettext import gettext as tr from holidays.calendars import _CustomIslamicHolidays -from holidays.calendars.gregorian import JAN, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC +from holidays.calendars.gregorian import JAN, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC from holidays.groups import ChristianHolidays, InternationalHolidays, IslamicHolidays from holidays.holiday_base import HolidayBase @@ -107,43 +107,38 @@ class MLI(Mali): class MaliIslamicHolidays(_CustomIslamicHolidays): # https://web.archive.org/web/20250619042440/https://www.timeanddate.com/holidays/mali/eid-al-adha + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2015, 2025) EID_AL_ADHA_DATES = { 2015: (SEP, 24), 2016: (SEP, 13), 2017: (SEP, 2), 2018: (AUG, 22), - 2019: (AUG, 11), - 2020: (JUL, 31), 2021: (JUL, 21), - 2022: (JUL, 9), - 2023: (JUN, 28), 2024: (JUN, 17), 2025: (JUN, 7), } # https://web.archive.org/web/20250318001443/https://www.timeanddate.com/holidays/mali/eid-al-fitr + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2015, 2025) EID_AL_FITR_DATES = { 2015: (JUL, 18), 2016: (JUL, 7), 2017: (JUN, 26), - 2018: (JUN, 15), 2019: (JUN, 3), 2020: (MAY, 23), 2021: (MAY, 12), 2022: (MAY, 1), - 2023: (APR, 21), 2024: (APR, 9), - 2025: (MAR, 30), } # https://web.archive.org/web/20240424165412/https://www.timeanddate.com/holidays/mali/prophet-birthday + MAWLID_DATES_CONFIRMED_YEARS = (2015, 2024) MAWLID_DATES = { 2015: ((JAN, 3), (DEC, 24)), 2016: (DEC, 12), 2017: (DEC, 1), 2018: (NOV, 21), 2019: (NOV, 10), - 2020: (OCT, 29), 2021: (OCT, 19), 2022: (OCT, 9), 2023: (SEP, 28), diff --git a/holidays/countries/mauritius.py b/holidays/countries/mauritius.py index b40b221bb..e08f1284a 100644 --- a/holidays/countries/mauritius.py +++ b/holidays/countries/mauritius.py @@ -165,12 +165,11 @@ class MauritiusHinduHolidays(_CustomHinduHolidays): class MauritiusIslamicHolidays(_CustomIslamicHolidays): # https://web.archive.org/web/20250420201326/https://www.timeanddate.com/holidays/mauritius/eid-al-fitr + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2016, 2025) EID_AL_FITR_DATES = { - 2016: (JUL, 6), 2017: (JUN, 26), 2018: (JUN, 16), 2019: (JUN, 5), - 2020: (MAY, 24), 2021: (MAY, 14), 2022: (MAY, 3), 2023: (APR, 22), diff --git a/holidays/countries/montenegro.py b/holidays/countries/montenegro.py index 251135b26..f62fe813b 100644 --- a/holidays/countries/montenegro.py +++ b/holidays/countries/montenegro.py @@ -13,7 +13,7 @@ from gettext import gettext as tr from holidays.calendars import _CustomIslamicHolidays -from holidays.calendars.gregorian import GREGORIAN_CALENDAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV +from holidays.calendars.gregorian import GREGORIAN_CALENDAR, JUN, JUL, AUG, SEP, OCT, NOV from holidays.calendars.julian import JULIAN_CALENDAR from holidays.constants import CATHOLIC, HEBREW, ISLAMIC, ORTHODOX, PUBLIC, WORKDAY from holidays.groups import ( @@ -164,36 +164,21 @@ class MNE(Montenegro): class MontenegroIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2012, 2024) EID_AL_ADHA_DATES = { - 2012: (OCT, 26), - 2013: (OCT, 15), 2014: (OCT, 5), 2015: (SEP, 24), 2016: (SEP, 13), 2017: (SEP, 2), 2018: (AUG, 22), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), - 2024: (JUN, 16), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2012, 2024) EID_AL_FITR_DATES = { - 2012: (AUG, 19), - 2013: (AUG, 8), 2014: (JUL, 29), 2015: (JUL, 18), 2016: (JUL, 7), 2017: (JUN, 26), - 2018: (JUN, 15), - 2019: (JUN, 4), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), - 2023: (APR, 21), - 2024: (APR, 10), } diff --git a/holidays/countries/nepal.py b/holidays/countries/nepal.py index b56f6812d..516669595 100644 --- a/holidays/countries/nepal.py +++ b/holidays/countries/nepal.py @@ -292,46 +292,12 @@ def _populate_workday_holidays(self): self._add_non_continuous_holidays(is_workday=True) -class NepalIslamicHolidays(_CustomIslamicHolidays): - # Bakrid / Eid-al-Adha. - EID_AL_ADHA_DATES = { - 2010: (NOV, 17), - 2011: (NOV, 7), - 2012: (OCT, 27), - 2013: (OCT, 16), - 2014: (OCT, 6), - 2015: (SEP, 25), - 2016: (SEP, 13), - 2017: (SEP, 2), - 2018: (AUG, 22), - 2019: (AUG, 12), - 2020: (AUG, 1), - 2021: (JUL, 21), - 2022: (JUL, 10), - 2023: (JUN, 29), - 2024: (JUN, 17), - 2025: (JUN, 7), - } +class NP(Nepal): + pass - # Id-ul-Fitr / Eid-al-Fitr. - EID_AL_FITR_DATES = { - 2010: (SEP, 10), - 2011: (AUG, 31), - 2012: (AUG, 20), - 2013: (AUG, 8), - 2014: (JUL, 29), - 2015: (JUL, 18), - 2016: (JUL, 7), - 2017: (JUN, 26), - 2018: (JUN, 16), - 2019: (JUN, 5), - 2020: (MAY, 25), - 2021: (MAY, 14), - 2022: (MAY, 3), - 2023: (APR, 22), - 2024: (APR, 11), - 2025: (MAR, 31), - } + +class NPL(Nepal): + pass class NepalHinduHolidays(_CustomHinduHolidays): @@ -398,12 +364,44 @@ class NepalHinduHolidays(_CustomHinduHolidays): } -class NP(Nepal): - pass - +class NepalIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2010, 2025) + EID_AL_ADHA_DATES = { + 2010: (NOV, 17), + 2011: (NOV, 7), + 2012: (OCT, 27), + 2013: (OCT, 16), + 2014: (OCT, 6), + 2015: (SEP, 25), + 2016: (SEP, 13), + 2017: (SEP, 2), + 2018: (AUG, 22), + 2019: (AUG, 12), + 2020: (AUG, 1), + 2021: (JUL, 21), + 2022: (JUL, 10), + 2023: (JUN, 29), + 2024: (JUN, 17), + 2025: (JUN, 7), + } -class NPL(Nepal): - pass + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2010, 2025) + EID_AL_FITR_DATES = { + 2011: (AUG, 31), + 2012: (AUG, 20), + 2014: (JUL, 29), + 2015: (JUL, 18), + 2016: (JUL, 7), + 2017: (JUN, 26), + 2018: (JUN, 16), + 2019: (JUN, 5), + 2020: (MAY, 25), + 2021: (MAY, 14), + 2022: (MAY, 3), + 2023: (APR, 22), + 2024: (APR, 11), + 2025: (MAR, 31), + } class NepalStaticHolidays: diff --git a/holidays/countries/niger.py b/holidays/countries/niger.py index 46db78bb8..bd8a98f95 100644 --- a/holidays/countries/niger.py +++ b/holidays/countries/niger.py @@ -156,37 +156,37 @@ def _populate_optional_holidays(self): self._add_observed(self._add_all_saints_day(tr("Toussaint"))) +class NE(Niger): + pass + + +class NER(Niger): + pass + + class NigerIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (1998, 2025) EID_AL_ADHA_DATES = { 1998: (APR, 8), 1999: (MAR, 28), - 2000: (MAR, 16), 2001: (MAR, 6), 2002: (FEB, 23), 2003: (FEB, 12), 2004: (FEB, 2), - 2005: (JAN, 21), - 2006: ((JAN, 10), (DEC, 31)), - 2007: (DEC, 20), 2008: (DEC, 9), 2009: (NOV, 28), 2010: (NOV, 17), 2011: (NOV, 7), - 2012: (OCT, 26), - 2013: (OCT, 15), 2014: (OCT, 5), + 2015: (SEP, 24), 2016: (SEP, 13), 2017: (SEP, 2), 2018: (AUG, 22), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), 2022: (JUL, 10), - 2023: (JUN, 28), - 2024: (JUN, 16), 2025: (JUN, 7), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (1998, 2025) EID_AL_FITR_DATES = { 1998: (JAN, 30), 1999: (JAN, 19), @@ -194,127 +194,67 @@ class NigerIslamicHolidays(_CustomIslamicHolidays): 2001: (DEC, 17), 2002: (DEC, 6), 2003: (NOV, 26), - 2004: (NOV, 14), 2005: (NOV, 4), 2006: (OCT, 24), - 2007: (OCT, 13), 2008: (OCT, 2), 2009: (SEP, 21), - 2010: (SEP, 10), 2011: (AUG, 31), - 2012: (AUG, 19), - 2013: (AUG, 8), 2014: (JUL, 29), 2015: (JUL, 18), 2016: (JUL, 7), 2017: (JUN, 26), - 2018: (JUN, 15), - 2019: (JUN, 4), 2020: (MAY, 23), 2021: (MAY, 12), 2022: (MAY, 1), - 2023: (APR, 21), 2024: (APR, 9), - 2025: (MAR, 30), } + HIJRI_NEW_YEAR_DATES_CONFIRMED_YEARS = (1998, 2025) HIJRI_NEW_YEAR_DATES = { 1998: (APR, 28), - 1999: (APR, 17), - 2000: (APR, 6), - 2001: (MAR, 26), - 2002: (MAR, 15), 2003: (MAR, 5), 2004: (FEB, 22), - 2005: (FEB, 10), - 2006: (JAN, 31), - 2007: (JAN, 20), - 2008: ((JAN, 10), (DEC, 29)), - 2009: (DEC, 18), 2010: (DEC, 8), 2011: (NOV, 27), - 2012: (NOV, 15), 2013: (NOV, 5), - 2014: (OCT, 25), 2015: (OCT, 15), 2016: (OCT, 3), 2017: (SEP, 22), 2018: (SEP, 12), - 2019: (AUG, 31), 2020: (AUG, 21), 2021: (AUG, 10), - 2022: (JUL, 30), - 2023: (JUL, 19), 2024: (JUL, 6), 2025: (JUN, 27), } + LAYLAT_AL_QADR_DATES_CONFIRMED_YEARS = (1998, 2025) LAYLAT_AL_QADR_DATES = { 1998: (JAN, 26), 1999: (JAN, 15), 2000: ((JAN, 4), (DEC, 24)), 2001: (DEC, 13), - 2002: (DEC, 2), 2003: (NOV, 22), 2004: (NOV, 11), 2005: (OCT, 31), - 2006: (OCT, 20), - 2007: (OCT, 9), 2008: (SEP, 28), - 2009: (SEP, 17), - 2010: (SEP, 6), - 2011: (AUG, 27), - 2012: (AUG, 15), - 2013: (AUG, 4), 2014: (JUL, 25), - 2015: (JUL, 14), - 2016: (JUL, 2), - 2017: (JUN, 22), - 2018: (JUN, 11), - 2019: (JUN, 1), - 2020: (MAY, 20), - 2021: (MAY, 9), - 2022: (APR, 28), - 2023: (APR, 18), - 2024: (APR, 6), - 2025: (MAR, 27), } + MAWLID_DATES_CONFIRMED_YEARS = (1998, 2025) MAWLID_DATES = { 1998: (JUL, 7), - 1999: (JUN, 26), 2000: (JUN, 15), - 2001: (JUN, 4), - 2002: (MAY, 24), 2003: (MAY, 14), 2004: (MAY, 2), - 2005: (APR, 21), 2006: (APR, 11), - 2007: (MAR, 31), - 2008: (MAR, 20), - 2009: (MAR, 9), - 2010: (FEB, 26), 2011: (FEB, 16), 2012: (FEB, 5), - 2013: (JAN, 24), 2014: (JAN, 14), 2015: ((JAN, 3), (DEC, 24)), 2016: (DEC, 12), 2017: (DEC, 1), 2018: (NOV, 21), 2019: (NOV, 10), - 2020: (OCT, 29), - 2021: (OCT, 18), - 2022: (OCT, 8), - 2023: (SEP, 27), 2024: (SEP, 16), 2025: (SEP, 5), } - - -class NE(Niger): - pass - - -class NER(Niger): - pass diff --git a/holidays/countries/north_macedonia.py b/holidays/countries/north_macedonia.py index 7956cca90..609464c9e 100644 --- a/holidays/countries/north_macedonia.py +++ b/holidays/countries/north_macedonia.py @@ -13,18 +13,7 @@ from gettext import gettext as tr from holidays.calendars import _CustomIslamicHolidays -from holidays.calendars.gregorian import ( - GREGORIAN_CALENDAR, - MAR, - APR, - MAY, - JUN, - JUL, - AUG, - SEP, - OCT, - NOV, -) +from holidays.calendars.gregorian import GREGORIAN_CALENDAR, APR, MAY, JUL, SEP, OCT from holidays.calendars.julian import JULIAN_CALENDAR from holidays.constants import ( ALBANIAN, @@ -262,42 +251,17 @@ class MKD(NorthMacedonia): class NorthMacedoniaIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2010, 2025) EID_AL_ADHA_DATES = { - 2010: (NOV, 16), - 2011: (NOV, 6), 2012: (OCT, 25), - 2013: (OCT, 15), - 2014: (OCT, 4), 2015: (SEP, 24), 2016: (SEP, 12), - 2017: (SEP, 1), - 2018: (AUG, 21), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), - 2024: (JUN, 16), - 2025: (JUN, 6), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2010, 2025) EID_AL_FITR_DATES = { 2010: (SEP, 9), - 2011: (AUG, 30), - 2012: (AUG, 19), - 2013: (AUG, 8), - 2014: (JUL, 28), - 2015: (JUL, 17), 2016: (JUL, 5), - 2017: (JUN, 25), - 2018: (JUN, 15), - 2019: (JUN, 4), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), - 2023: (APR, 21), - 2024: (APR, 10), - 2025: (MAR, 30), } diff --git a/holidays/countries/oman.py b/holidays/countries/oman.py index 88a6bc2e1..4880156aa 100644 --- a/holidays/countries/oman.py +++ b/holidays/countries/oman.py @@ -14,17 +14,14 @@ from holidays.calendars import _CustomIslamicHolidays from holidays.calendars.gregorian import ( - JAN, FEB, MAR, APR, - MAY, JUN, JUL, AUG, SEP, OCT, - NOV, THU, FRI, SAT, @@ -123,63 +120,44 @@ class OMN(Oman): class OmanIslamicHolidays(_CustomIslamicHolidays): # https://web.archive.org/web/20240911084650/https://www.timeanddate.com/holidays/oman/muharram-new-year + HIJRI_NEW_YEAR_DATES_CONFIRMED_YEARS = (2018, 2024) HIJRI_NEW_YEAR_DATES = { - 2018: (SEP, 11), 2019: (SEP, 1), 2020: (AUG, 21), 2021: (AUG, 10), - 2022: (JUL, 30), 2023: (JUL, 20), - 2024: (JUL, 7), } # https://web.archive.org/web/20240810230306/https://www.timeanddate.com/holidays/oman/prophet-birthday + MAWLID_DATES_CONFIRMED_YEARS = (2018, 2024) MAWLID_DATES = { - 2018: (NOV, 20), - 2019: (NOV, 9), - 2020: (OCT, 29), 2021: (OCT, 19), 2022: (OCT, 9), 2023: (SEP, 28), - 2024: (SEP, 15), } # https://web.archive.org/web/20241231191036/https://www.timeanddate.com/holidays/oman/isra-miraj + ISRA_AND_MIRAJ_DATES_CONFIRMED_YEARS = (2018, 2025) ISRA_AND_MIRAJ_DATES = { - 2018: (APR, 13), - 2019: (APR, 3), - 2020: (MAR, 22), - 2021: (MAR, 11), 2022: (MAR, 1), 2023: (FEB, 19), - 2024: (FEB, 8), - 2025: (JAN, 27), } # https://web.archive.org/web/20240913230603/https://www.timeanddate.com/holidays/oman/eid-al-adha + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2019, 2024) EID_AL_ADHA_DATES = { - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), 2024: (JUN, 17), } # https://web.archive.org/web/20241231191036/https://www.timeanddate.com/holidays/oman/eid-al-fitr + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2019, 2025) EID_AL_FITR_DATES = { - 2019: (JUN, 4), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), 2023: (APR, 22), - 2024: (APR, 10), 2025: (MAR, 31), } # https://web.archive.org/web/20240814104839/https://www.timeanddate.com/holidays/oman/ramadan-begins + RAMADAN_BEGINNING_DATES_CONFIRMED_YEARS = (2023, 2025) RAMADAN_BEGINNING_DATES = { - 2023: (MAR, 23), 2024: (MAR, 12), - 2025: (MAR, 1), } diff --git a/holidays/countries/pakistan.py b/holidays/countries/pakistan.py index 9437fdffd..5c896a8d8 100644 --- a/holidays/countries/pakistan.py +++ b/holidays/countries/pakistan.py @@ -107,48 +107,32 @@ class PAK(Pakistan): class PakistanIslamicHolidays(_CustomIslamicHolidays): # https://web.archive.org/web/20250724060822/https://www.timeanddate.com/holidays/pakistan/ashura + ASHURA_DATES_CONFIRMED_YEARS = (2005, 2025) ASHURA_DATES = { 2005: (FEB, 18), 2006: (FEB, 8), 2007: (JAN, 28), 2008: (JAN, 18), 2009: ((JAN, 6), (DEC, 26)), - 2010: (DEC, 16), - 2011: (DEC, 5), 2012: (NOV, 23), - 2013: (NOV, 13), - 2014: (NOV, 3), - 2015: (OCT, 23), - 2016: (OCT, 11), - 2017: (SEP, 30), 2018: (SEP, 21), - 2019: (SEP, 9), - 2020: (AUG, 29), - 2021: (AUG, 18), 2022: (AUG, 9), - 2023: (JUL, 28), - 2024: (JUL, 16), 2025: (JUL, 6), } # https://web.archive.org/web/20250724060629/https://www.timeanddate.com/holidays/pakistan/eid-ul-azha + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2005, 2025) EID_AL_ADHA_DATES = { - 2005: (JAN, 21), - 2006: ((JAN, 10), (DEC, 31)), - 2007: (DEC, 20), 2008: (DEC, 9), 2009: (NOV, 28), 2010: (NOV, 17), 2011: (NOV, 7), - 2012: (OCT, 26), - 2013: (OCT, 15), 2014: (OCT, 6), 2015: (SEP, 24), 2016: (SEP, 12), 2017: (SEP, 2), 2018: (AUG, 22), 2019: (AUG, 12), - 2020: (JUL, 31), 2021: (JUL, 21), 2022: (JUL, 10), 2023: (JUN, 29), @@ -157,41 +141,32 @@ class PakistanIslamicHolidays(_CustomIslamicHolidays): } # https://web.archive.org/web/20250724060834/https://www.timeanddate.com/holidays/pakistan/eid-ul-fitr-1 + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2005, 2025) EID_AL_FITR_DATES = { 2005: (NOV, 4), 2006: (OCT, 24), - 2007: (OCT, 13), 2008: (OCT, 2), 2009: (SEP, 21), - 2010: (SEP, 10), 2011: (AUG, 31), - 2012: (AUG, 19), - 2013: (AUG, 8), 2014: (JUL, 29), - 2015: (JUL, 17), - 2016: (JUL, 6), 2017: (JUN, 26), 2018: (JUN, 16), 2019: (JUN, 5), - 2020: (MAY, 24), - 2021: (MAY, 13), 2022: (MAY, 3), 2023: (APR, 22), - 2024: (APR, 10), 2025: (MAR, 31), } # https://web.archive.org/web/20250724061027/https://www.timeanddate.com/holidays/pakistan/eid-milad-un-nabi + + MAWLID_DATES_CONFIRMED_YEARS = (2005, 2024) MAWLID_DATES = { 2005: (APR, 22), 2006: (APR, 11), - 2007: (MAR, 31), 2008: (MAR, 21), - 2009: (MAR, 9), 2010: (MAR, 1), 2011: (FEB, 17), 2012: (FEB, 5), - 2013: (JAN, 24), 2014: (JAN, 14), 2015: (JAN, 4), 2016: (DEC, 12), diff --git a/holidays/countries/palestine.py b/holidays/countries/palestine.py index 3b89eacae..f67cf86ac 100644 --- a/holidays/countries/palestine.py +++ b/holidays/countries/palestine.py @@ -13,7 +13,7 @@ from gettext import gettext as tr from holidays.calendars import _CustomIslamicHolidays -from holidays.calendars.gregorian import GREGORIAN_CALENDAR, SEP +from holidays.calendars.gregorian import GREGORIAN_CALENDAR from holidays.calendars.julian import JULIAN_CALENDAR from holidays.constants import CATHOLIC, ORTHODOX, PUBLIC from holidays.groups import ChristianHolidays, InternationalHolidays, IslamicHolidays @@ -171,7 +171,4 @@ class PSE(Palestine): class PalestineIslamicHolidays(_CustomIslamicHolidays): - # All other dates follow Umm al-Qura calendar. - MAWLID_DATES = { - 2023: (SEP, 27), - } + MAWLID_DATES_CONFIRMED_YEARS = (2020, 2024) diff --git a/holidays/countries/philippines.py b/holidays/countries/philippines.py index eb5097a5e..08b3902a1 100644 --- a/holidays/countries/philippines.py +++ b/holidays/countries/philippines.py @@ -220,49 +220,34 @@ class PhilippinesChineseHolidays(_CustomChineseHolidays): class PhilippinesIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2010, 2025) EID_AL_ADHA_DATES = { 2010: (NOV, 17), 2011: (NOV, 7), - 2012: (OCT, 26), - 2013: (OCT, 15), 2014: (OCT, 6), 2015: (SEP, 25), 2016: (SEP, 10), 2017: (SEP, 2), - 2018: (AUG, 21), 2019: (AUG, 12), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), 2024: (JUN, 17), - 2025: (JUN, 6), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2002, 2025) EID_AL_FITR_DATES = { 2002: (DEC, 6), 2003: (NOV, 26), - 2004: (NOV, 14), 2005: (NOV, 4), 2006: (OCT, 24), 2007: (OCT, 12), - 2008: (OCT, 1), 2009: (SEP, 21), - 2010: (SEP, 10), - 2011: (AUG, 30), 2012: (AUG, 20), 2013: (AUG, 9), 2014: (JUL, 29), - 2015: (JUL, 17), 2016: (JUL, 7), 2017: (JUN, 26), - 2018: (JUN, 15), 2019: (JUN, 5), 2020: (MAY, 25), - 2021: (MAY, 13), 2022: (MAY, 3), - 2023: (APR, 21), - 2024: (APR, 10), 2025: (APR, 1), } diff --git a/holidays/countries/qatar.py b/holidays/countries/qatar.py index d276bff93..7b0f06da1 100644 --- a/holidays/countries/qatar.py +++ b/holidays/countries/qatar.py @@ -13,22 +13,7 @@ from gettext import gettext as tr from holidays.calendars import _CustomIslamicHolidays -from holidays.calendars.gregorian import ( - JAN, - MAR, - APR, - MAY, - JUN, - JUL, - AUG, - SEP, - OCT, - NOV, - DEC, - THU, - FRI, - SAT, -) +from holidays.calendars.gregorian import JAN, JUL, AUG, SEP, OCT, NOV, DEC, THU, FRI, SAT from holidays.constants import BANK, PUBLIC from holidays.groups import InternationalHolidays, IslamicHolidays, StaticHolidays from holidays.holiday_base import HolidayBase @@ -109,52 +94,25 @@ class QAT(Qatar): class QatarIslamicHolidays(_CustomIslamicHolidays): # https://web.archive.org/web/20250422212912/https://www.timeanddate.com/holidays/qatar/eid-al-adha + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2005, 2024) EID_AL_ADHA_DATES = { - 2005: (JAN, 21), - 2006: ((JAN, 10), (DEC, 31)), - 2007: (DEC, 20), 2008: (DEC, 9), 2009: (NOV, 28), 2010: (NOV, 15), - 2011: (NOV, 6), - 2012: (OCT, 26), - 2013: (OCT, 15), - 2014: (OCT, 4), - 2015: (SEP, 23), 2016: (SEP, 10), 2017: (AUG, 31), 2018: (AUG, 22), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), - 2024: (JUN, 16), } # https://web.archive.org/web/20241207022523/https://www.timeanddate.com/holidays/qatar/eid-al-fitr + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2005, 2025) EID_AL_FITR_DATES = { 2005: (NOV, 4), 2006: (OCT, 24), - 2007: (OCT, 13), 2008: (OCT, 2), 2009: (SEP, 21), - 2010: (SEP, 10), 2011: (AUG, 31), - 2012: (AUG, 19), - 2013: (AUG, 8), - 2014: (JUL, 28), 2015: (JUL, 18), - 2016: (JUL, 6), - 2017: (JUN, 25), - 2018: (JUN, 15), - 2019: (JUN, 4), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), - 2023: (APR, 21), - 2024: (APR, 10), - 2025: (MAR, 30), } diff --git a/holidays/countries/saudi_arabia.py b/holidays/countries/saudi_arabia.py index 2eb908572..71d7ca4a1 100644 --- a/holidays/countries/saudi_arabia.py +++ b/holidays/countries/saudi_arabia.py @@ -125,10 +125,13 @@ class SAU(SaudiArabia): class SaudiArabiaIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2001, 2025) EID_AL_ADHA_DATES = { 2015: (SEP, 24), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2001, 2025) + class SaudiArabiaStaticHolidays: special_public_holidays = { diff --git a/holidays/countries/senegal.py b/holidays/countries/senegal.py index 3c1f2324f..bbc1e6897 100644 --- a/holidays/countries/senegal.py +++ b/holidays/countries/senegal.py @@ -13,7 +13,7 @@ from gettext import gettext as tr from holidays.calendars import _CustomIslamicHolidays -from holidays.calendars.gregorian import MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, DEC +from holidays.calendars.gregorian import APR, MAY, JUN, JUL, AUG, SEP, OCT, DEC from holidays.groups import ( ChristianHolidays, InternationalHolidays, @@ -131,15 +131,13 @@ class SEN(Senegal): class SenegalIslamicHolidays(_CustomIslamicHolidays): # https://web.archive.org/web/20250609044648/https://www.timeanddate.com/holidays/senegal/tamkharit + ASHURA_DATES_CONFIRMED_YEARS = (2020, 2024) ASHURA_DATES = { - 2020: (AUG, 29), - 2021: (AUG, 18), - 2022: (AUG, 8), - 2023: (JUL, 28), 2024: (JUL, 17), } # https://web.archive.org/web/20250609061446/https://www.timeanddate.com/holidays/senegal/grand-magal-de-touba + GRAND_MAGAL_OF_TOUBA_DATES_CONFIRMED_YEARS = (2020, 2024) GRAND_MAGAL_OF_TOUBA_DATES = { 2020: (OCT, 6), 2021: (SEP, 26), @@ -149,27 +147,19 @@ class SenegalIslamicHolidays(_CustomIslamicHolidays): } # https://web.archive.org/web/20250609091559/https://www.timeanddate.com/holidays/senegal/maouloud - MAWLID_DATES = { - 2020: (OCT, 29), - 2021: (OCT, 18), - 2022: (OCT, 8), - 2023: (SEP, 27), - 2024: (SEP, 15), - } + MAWLID_DATES_CONFIRMED_YEARS = (2020, 2024) # https://web.archive.org/web/20250609092813/https://www.timeanddate.com/holidays/senegal/korite + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2020, 2025) EID_AL_FITR_DATES = { - 2020: (MAY, 24), 2021: (MAY, 12), 2022: (MAY, 1), 2023: (APR, 22), - 2024: (APR, 10), - 2025: (MAR, 30), } # https://web.archive.org/web/20250609102658/https://www.timeanddate.com/holidays/senegal/tabaski + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2020, 2024) EID_AL_ADHA_DATES = { - 2020: (JUL, 31), 2021: (JUL, 21), 2022: (JUL, 10), 2023: (JUN, 29), diff --git a/holidays/countries/sierra_leone.py b/holidays/countries/sierra_leone.py index 5724fd0a3..bd3e9975d 100644 --- a/holidays/countries/sierra_leone.py +++ b/holidays/countries/sierra_leone.py @@ -12,7 +12,7 @@ from gettext import gettext as tr -from holidays.calendars.gregorian import APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV +from holidays.calendars.gregorian import JUN, AUG, NOV from holidays.calendars.islamic import _CustomIslamicHolidays from holidays.groups import ChristianHolidays, InternationalHolidays, IslamicHolidays from holidays.observed_holiday_base import ObservedHolidayBase, SAT_SUN_TO_NEXT_WORKDAY @@ -115,35 +115,19 @@ class SierraLeoneIslamicHolidays(_CustomIslamicHolidays): * """ - # Prophet's Birthday + MAWLID_DATES_CONFIRMED_YEARS = (2018, 2024) MAWLID_DATES = { 2018: (NOV, 21), 2019: (NOV, 10), - 2020: (OCT, 29), - 2021: (OCT, 18), - 2022: (OCT, 8), - 2023: (SEP, 27), - 2024: (SEP, 15), } - # Eid al-Fitr + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2018, 2024) EID_AL_FITR_DATES = { - 2018: (JUN, 15), 2019: (JUN, 5), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), - 2023: (APR, 21), - 2024: (APR, 10), } - # Eid al-Adha + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2018, 2024) EID_AL_ADHA_DATES = { 2018: (AUG, 22), 2019: (AUG, 12), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), - 2024: (JUN, 16), } diff --git a/holidays/countries/singapore.py b/holidays/countries/singapore.py index 04098eaa3..1a83a4368 100644 --- a/holidays/countries/singapore.py +++ b/holidays/countries/singapore.py @@ -245,62 +245,29 @@ class SingaporeHinduHolidays(_CustomHinduHolidays): class SingaporeIslamicHolidays(_CustomIslamicHolidays): - # Hari Raya Haji + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2001, 2026) EID_AL_ADHA_DATES = { 2001: (MAR, 6), 2002: (FEB, 23), 2003: (FEB, 12), - 2004: (FEB, 1), - 2005: (JAN, 21), - 2006: ((JAN, 10), (DEC, 31)), - 2007: (DEC, 20), - 2008: (DEC, 8), - 2009: (NOV, 27), 2010: (NOV, 17), - 2011: (NOV, 6), - 2012: (OCT, 26), - 2013: (OCT, 15), 2014: (OCT, 5), 2015: (SEP, 24), 2016: (SEP, 12), - 2017: (SEP, 1), 2018: (AUG, 22), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), 2022: (JUL, 10), 2023: (JUN, 29), 2024: (JUN, 17), 2025: (JUN, 7), - 2026: (MAY, 27), } - # Hari Raya Puasa + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2001, 2026) EID_AL_FITR_DATES = { - 2001: (DEC, 16), 2002: (DEC, 6), - 2003: (NOV, 25), - 2004: (NOV, 14), - 2005: (NOV, 3), 2006: (OCT, 24), - 2007: (OCT, 13), - 2008: (OCT, 1), - 2009: (SEP, 20), - 2010: (SEP, 10), - 2011: (AUG, 30), - 2012: (AUG, 19), - 2013: (AUG, 8), - 2014: (JUL, 28), - 2015: (JUL, 17), - 2016: (JUL, 6), - 2017: (JUN, 25), - 2018: (JUN, 15), 2019: (JUN, 5), - 2020: (MAY, 24), - 2021: (MAY, 13), 2022: (MAY, 3), 2023: (APR, 22), - 2024: (APR, 10), 2025: (MAR, 31), 2026: (MAR, 21), } diff --git a/holidays/countries/spain.py b/holidays/countries/spain.py index d78aa5dce..903b54f79 100644 --- a/holidays/countries/spain.py +++ b/holidays/countries/spain.py @@ -13,7 +13,7 @@ from gettext import gettext as tr from holidays.calendars import _CustomIslamicHolidays -from holidays.calendars.gregorian import MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV +from holidays.calendars.gregorian import MAR, MAY, JUN, AUG, SEP, OCT, NOV from holidays.groups import ( ChristianHolidays, IslamicHolidays, @@ -717,28 +717,21 @@ class ESP(Spain): class SpainIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2010, 2025) EID_AL_ADHA_DATES = { 2010: (NOV, 17), - 2011: (NOV, 6), 2012: (OCT, 25), - 2013: (OCT, 15), - 2014: (OCT, 4), 2015: (SEP, 25), 2016: (SEP, 12), - 2017: (SEP, 1), 2018: (AUG, 22), 2019: (AUG, 12), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), 2023: (JUN, 29), 2024: (JUN, 17), - 2025: (JUN, 6), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2022, 2025) EID_AL_FITR_DATES = { 2022: (MAY, 3), - 2023: (APR, 21), 2025: (MAR, 31), } diff --git a/holidays/countries/sri_lanka.py b/holidays/countries/sri_lanka.py index 9dd66a312..ff2e522d2 100644 --- a/holidays/countries/sri_lanka.py +++ b/holidays/countries/sri_lanka.py @@ -289,10 +289,9 @@ class SriLankaHinduHolidays(_CustomHinduHolidays): class SriLankaIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2003, 2025) EID_AL_ADHA_DATES = { 2003: (FEB, 12), - 2004: (FEB, 1), - 2005: (JAN, 21), 2006: ((JAN, 11), (DEC, 31)), 2007: (DEC, 21), 2008: (DEC, 9), @@ -306,7 +305,6 @@ class SriLankaIslamicHolidays(_CustomIslamicHolidays): 2014: (OCT, 5), 2015: (SEP, 24), 2016: (SEP, 12), - 2017: (SEP, 1), 2018: (AUG, 22), 2019: (AUG, 12), 2020: (AUG, 1), @@ -317,23 +315,17 @@ class SriLankaIslamicHolidays(_CustomIslamicHolidays): 2025: (JUN, 7), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2003, 2025) EID_AL_FITR_DATES = { 2003: (NOV, 26), - 2004: (NOV, 14), 2005: (NOV, 4), 2006: (OCT, 24), - 2007: (OCT, 13), - 2008: (OCT, 1), 2009: (SEP, 21), - 2010: (SEP, 10), 2011: (AUG, 31), - 2012: (AUG, 19), 2013: (AUG, 9), 2014: (JUL, 29), 2015: (JUL, 18), - 2016: (JUL, 6), 2017: (JUN, 26), - 2018: (JUN, 15), 2019: (JUN, 5), 2020: (MAY, 25), 2021: (MAY, 14), @@ -343,25 +335,22 @@ class SriLankaIslamicHolidays(_CustomIslamicHolidays): 2025: (MAR, 31), } + MAWLID_DATES_CONFIRMED_YEARS = (2003, 2025) MAWLID_DATES = { 2003: (MAY, 14), 2004: (MAY, 2), 2005: (APR, 22), 2006: (APR, 11), 2007: (APR, 1), - 2008: (MAR, 20), 2009: (MAR, 10), 2010: (FEB, 27), 2011: (FEB, 16), 2012: (FEB, 5), 2013: (JAN, 25), 2014: (JAN, 14), - # Technically 2015 has both JAN 5 and DEC 24 - # but this is only observed for JAN 4. 2015: (JAN, 4), 2016: (DEC, 12), 2017: (DEC, 1), - 2018: (NOV, 20), 2019: (NOV, 10), 2020: (OCT, 30), 2021: (OCT, 19), diff --git a/holidays/countries/suriname.py b/holidays/countries/suriname.py index 01b4c85bb..f9cf6f65f 100644 --- a/holidays/countries/suriname.py +++ b/holidays/countries/suriname.py @@ -14,7 +14,7 @@ from holidays import HolidayBase from holidays.calendars import _CustomHinduHolidays, _CustomIslamicHolidays -from holidays.calendars.gregorian import MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV +from holidays.calendars.gregorian import MAR, APR, JUN, JUL, AUG, SEP, OCT, NOV from holidays.groups import ( ChineseCalendarHolidays, ChristianHolidays, @@ -142,6 +142,14 @@ def _populate_public_holidays(self): self._add_chinese_new_years_day(tr("Chinees Nieuwjaar")) +class SR(Suriname): + pass + + +class SUR(Suriname): + pass + + class SurinameHinduHolidays(_CustomHinduHolidays): # https://web.archive.org/web/20241104221047/https://www.timeanddate.com/holidays/suriname/holi-phagwa HOLI_DATES = { @@ -187,41 +195,25 @@ class SurinameHinduHolidays(_CustomHinduHolidays): class SurinameIslamicHolidays(_CustomIslamicHolidays): # https://web.archive.org/web/20241107062349/https://www.timeanddate.com/holidays/suriname/eid-al-fitr + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2014, 2025) EID_AL_FITR_DATES = { 2014: (JUL, 29), 2015: (JUL, 18), 2016: (JUL, 7), 2017: (JUN, 26), - 2018: (JUN, 15), 2019: (JUN, 5), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), 2023: (APR, 22), - 2024: (APR, 10), 2025: (MAR, 31), } # https://web.archive.org/web/20241113121535/https://www.timeanddate.com/holidays/suriname/eid-al-adha + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2014, 2025) EID_AL_ADHA_DATES = { 2014: (OCT, 5), 2015: (SEP, 24), 2016: (SEP, 13), 2017: (SEP, 2), - 2018: (AUG, 21), 2019: (AUG, 12), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), 2023: (JUN, 29), - 2024: (JUN, 16), 2025: (JUN, 7), } - - -class SR(Suriname): - pass - - -class SUR(Suriname): - pass diff --git a/holidays/countries/tanzania.py b/holidays/countries/tanzania.py index 4d48d911e..a82a2d1c9 100644 --- a/holidays/countries/tanzania.py +++ b/holidays/countries/tanzania.py @@ -239,44 +239,38 @@ class TZA(Tanzania): class TanzaniaIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2013, 2023) EID_AL_ADHA_DATES = { - 2013: (OCT, 15), 2014: (OCT, 5), - 2015: (SEP, 23), 2016: (SEP, 16), 2017: (SEP, 2), 2018: (AUG, 22), 2019: (AUG, 13), - 2020: (JUL, 31), 2021: (JUL, 21), 2022: (JUL, 10), 2023: (JUN, 29), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2013, 2024) EID_AL_FITR_DATES = { - 2013: (AUG, 8), 2014: (JUL, 29), 2015: (JUL, 18), 2016: (JUL, 7), 2017: (JUN, 26), - 2018: (JUN, 15), 2019: (JUN, 5), - 2020: (MAY, 24), 2021: (MAY, 14), 2022: (MAY, 3), 2023: (APR, 22), - 2024: (APR, 10), } + MAWLID_DATES_CONFIRMED_YEARS = (2013, 2023) MAWLID_DATES = { - 2013: (JAN, 24), 2014: (JAN, 14), 2015: ((JAN, 3), (DEC, 24)), 2016: (DEC, 12), 2017: (DEC, 1), 2018: (NOV, 21), 2019: (NOV, 10), - 2020: (OCT, 29), 2021: (OCT, 19), 2022: (OCT, 9), 2023: (SEP, 28), diff --git a/holidays/countries/timor_leste.py b/holidays/countries/timor_leste.py index 618b4d937..17e841c25 100644 --- a/holidays/countries/timor_leste.py +++ b/holidays/countries/timor_leste.py @@ -193,39 +193,24 @@ class TLS(TimorLeste): class TimorLesteIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2011, 2025) EID_AL_ADHA_DATES = { 2011: (NOV, 7), - 2012: (OCT, 26), - 2013: (OCT, 15), - 2014: (OCT, 4), 2015: (SEP, 24), 2016: (SEP, 18), - 2017: (SEP, 1), - 2018: (AUG, 21), - 2019: (AUG, 11), - 2020: (JUL, 31), 2021: (JUL, 19), - 2022: (JUL, 9), 2023: (JUN, 29), 2024: (JUN, 17), - 2025: (JUN, 6), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2011, 2025) EID_AL_FITR_DATES = { 2011: (AUG, 31), 2012: (AUG, 20), - 2013: (AUG, 8), - 2014: (JUL, 28), - 2015: (JUL, 17), 2016: (JUL, 7), 2017: (JUN, 26), - 2018: (JUN, 15), 2019: (JUN, 6), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), 2023: (APR, 22), - 2024: (APR, 10), 2025: (MAR, 31), } diff --git a/holidays/countries/togo.py b/holidays/countries/togo.py index 466d2c223..17cd78b2e 100644 --- a/holidays/countries/togo.py +++ b/holidays/countries/togo.py @@ -13,7 +13,7 @@ from gettext import gettext as tr from holidays.calendars import _CustomIslamicHolidays -from holidays.calendars.gregorian import MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV +from holidays.calendars.gregorian import MAY, JUN, JUL, AUG, SEP, OCT, NOV from holidays.constants import PUBLIC, WORKDAY from holidays.groups import ChristianHolidays, InternationalHolidays, IslamicHolidays from holidays.holiday_base import HolidayBase @@ -129,54 +129,29 @@ class TGO(Togo): class TogoIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2010, 2025) EID_AL_ADHA_DATES = { 2010: (NOV, 17), 2011: (NOV, 7), - 2012: (OCT, 26), - 2013: (OCT, 15), 2014: (OCT, 5), 2015: (SEP, 24), 2016: (SEP, 13), 2017: (SEP, 2), 2018: (AUG, 22), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), - 2024: (JUN, 16), 2025: (JUN, 7), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2010, 2025) EID_AL_FITR_DATES = { - 2010: (SEP, 10), 2011: (AUG, 31), - 2012: (AUG, 19), - 2013: (AUG, 8), 2014: (JUL, 29), 2015: (JUL, 18), 2016: (JUL, 7), 2017: (JUN, 26), - 2018: (JUN, 15), 2019: (JUN, 5), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), - 2023: (APR, 21), - 2024: (APR, 10), - 2025: (MAR, 30), } + RAMADAN_BEGINNING_DATES_CONFIRMED_YEARS = (2015, 2025) RAMADAN_BEGINNING_DATES = { - 2015: (JUN, 18), - 2016: (JUN, 6), - 2017: (MAY, 27), 2018: (MAY, 17), - 2019: (MAY, 6), - 2020: (APR, 24), - 2021: (APR, 13), - 2022: (APR, 2), - 2023: (MAR, 23), - 2024: (MAR, 11), - 2025: (MAR, 1), } diff --git a/holidays/countries/trinidad_and_tobago.py b/holidays/countries/trinidad_and_tobago.py index 026b89878..fa105a713 100644 --- a/holidays/countries/trinidad_and_tobago.py +++ b/holidays/countries/trinidad_and_tobago.py @@ -14,7 +14,7 @@ from gettext import gettext as tr from holidays.calendars import _CustomHinduHolidays, _CustomIslamicHolidays -from holidays.calendars.gregorian import MAR, APR, MAY, JUN, JUL, AUG, OCT, NOV +from holidays.calendars.gregorian import MAR, APR, JUN, JUL, OCT, NOV from holidays.constants import OPTIONAL, PUBLIC from holidays.groups import ( ChristianHolidays, @@ -179,19 +179,12 @@ class TrinidadAndTobagoHinduHolidays(_CustomHinduHolidays): class TrinidadAndTobagoIslamicHolidays(_CustomIslamicHolidays): + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2012, 2025) EID_AL_FITR_DATES = { - 2012: (AUG, 19), - 2013: (AUG, 8), 2014: (JUL, 29), 2015: (JUL, 18), - 2016: (JUL, 6), 2017: (JUN, 26), - 2018: (JUN, 15), 2019: (JUN, 5), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), 2023: (APR, 22), - 2024: (APR, 10), 2025: (MAR, 31), } diff --git a/holidays/countries/turkey.py b/holidays/countries/turkey.py index b9b9a043c..56c1feb1e 100644 --- a/holidays/countries/turkey.py +++ b/holidays/countries/turkey.py @@ -129,204 +129,90 @@ class TUR(Turkey): class TurkeyIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (1936, 2032) EID_AL_ADHA_DATES = { - 1936: (MAR, 4), 1937: (FEB, 22), 1938: (FEB, 11), 1939: (JAN, 31), - 1940: (JAN, 20), 1941: ((JAN, 8), (DEC, 29)), - 1942: (DEC, 18), 1943: (DEC, 8), 1944: (NOV, 26), - 1945: (NOV, 15), - 1946: (NOV, 4), - 1947: (OCT, 25), - 1948: (OCT, 13), 1949: (OCT, 3), - 1950: (SEP, 23), - 1951: (SEP, 12), - 1952: (AUG, 31), - 1953: (AUG, 20), - 1954: (AUG, 9), - 1955: (JUL, 30), - 1956: (JUL, 19), - 1957: (JUL, 8), 1958: (JUN, 28), - 1959: (JUN, 17), 1960: (JUN, 5), - 1961: (MAY, 25), - 1962: (MAY, 14), 1963: (MAY, 4), 1964: (APR, 23), 1965: (APR, 12), - 1966: (APR, 1), - 1967: (MAR, 21), 1968: (MAR, 10), - 1969: (FEB, 27), 1970: (FEB, 17), - 1971: (FEB, 6), 1972: (JAN, 27), 1973: (JAN, 15), 1974: ((JAN, 4), (DEC, 24)), - 1975: (DEC, 13), 1976: (DEC, 2), 1977: (NOV, 22), 1978: (NOV, 11), - 1979: (OCT, 31), - 1980: (OCT, 19), - 1981: (OCT, 8), - 1982: (SEP, 27), - 1983: (SEP, 17), 1984: (SEP, 6), - 1985: (AUG, 26), 1986: (AUG, 16), 1987: (AUG, 5), 1988: (JUL, 24), - 1989: (JUL, 13), 1990: (JUL, 3), 1991: (JUN, 23), - 1992: (JUN, 11), 1993: (JUN, 1), 1994: (MAY, 21), 1995: (MAY, 10), 1996: (APR, 28), 1997: (APR, 18), - 1998: (APR, 7), 1999: (MAR, 28), - 2000: (MAR, 16), - 2001: (MAR, 5), - 2002: (FEB, 22), - 2003: (FEB, 11), - 2004: (FEB, 1), 2005: (JAN, 20), - 2006: ((JAN, 10), (DEC, 31)), - 2007: (DEC, 20), - 2008: (DEC, 8), - 2009: (NOV, 27), - 2010: (NOV, 16), - 2011: (NOV, 6), 2012: (OCT, 25), - 2013: (OCT, 15), - 2014: (OCT, 4), 2015: (SEP, 24), 2016: (SEP, 12), - 2017: (SEP, 1), - 2018: (AUG, 21), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), - 2024: (JUN, 16), - 2025: (JUN, 6), - 2026: (MAY, 27), - 2027: (MAY, 16), - 2028: (MAY, 5), - 2029: (APR, 24), - 2030: (APR, 13), - 2031: (APR, 2), - 2032: (MAR, 22), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (1936, 2032) EID_AL_FITR_DATES = { - 1936: (DEC, 15), - 1937: (DEC, 4), - 1938: (NOV, 23), 1939: (NOV, 13), - 1940: (NOV, 1), 1941: (OCT, 22), 1942: (OCT, 12), 1943: (OCT, 1), 1944: (SEP, 19), 1945: (SEP, 8), 1946: (AUG, 29), - 1947: (AUG, 18), - 1948: (AUG, 6), 1949: (JUL, 27), - 1950: (JUL, 16), - 1951: (JUL, 6), 1952: (JUN, 24), - 1953: (JUN, 13), - 1954: (JUN, 2), - 1955: (MAY, 23), 1956: (MAY, 12), - 1957: (MAY, 1), - 1958: (APR, 20), 1959: (APR, 9), 1960: (MAR, 29), - 1961: (MAR, 18), 1962: (MAR, 8), 1963: (FEB, 25), 1964: (FEB, 15), 1965: (FEB, 3), 1966: (JAN, 23), - 1967: (JAN, 12), - 1968: ((JAN, 1), (DEC, 21)), 1969: (DEC, 11), 1970: (DEC, 1), 1971: (NOV, 20), 1972: (NOV, 8), 1973: (OCT, 28), 1974: (OCT, 17), - 1975: (OCT, 6), 1976: (SEP, 25), 1977: (SEP, 15), 1978: (SEP, 4), 1979: (AUG, 24), - 1980: (AUG, 12), - 1981: (AUG, 1), 1982: (JUL, 22), 1983: (JUL, 12), - 1984: (JUN, 30), 1985: (JUN, 20), 1986: (JUN, 9), 1987: (MAY, 29), 1988: (MAY, 17), - 1989: (MAY, 6), - 1990: (APR, 26), 1991: (APR, 16), - 1992: (APR, 4), - 1993: (MAR, 24), - 1994: (MAR, 13), 1995: (MAR, 3), 1996: (FEB, 20), 1997: (FEB, 9), - 1998: (JAN, 29), 1999: (JAN, 19), - 2000: ((JAN, 8), (DEC, 27)), - 2001: (DEC, 16), - 2002: (DEC, 5), - 2003: (NOV, 25), - 2004: (NOV, 14), - 2005: (NOV, 3), - 2006: (OCT, 23), 2007: (OCT, 12), 2008: (SEP, 30), - 2009: (SEP, 20), 2010: (SEP, 9), - 2011: (AUG, 30), - 2012: (AUG, 19), - 2013: (AUG, 8), - 2014: (JUL, 28), - 2015: (JUL, 17), 2016: (JUL, 5), - 2017: (JUN, 25), - 2018: (JUN, 15), - 2019: (JUN, 4), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), - 2023: (APR, 21), - 2024: (APR, 10), - 2025: (MAR, 30), - 2026: (MAR, 20), - 2027: (MAR, 9), - 2028: (FEB, 26), - 2029: (FEB, 14), - 2030: (FEB, 4), - 2031: (JAN, 24), - 2032: (JAN, 14), } diff --git a/holidays/countries/united_arab_emirates.py b/holidays/countries/united_arab_emirates.py index 23d2702d8..2613c36fc 100644 --- a/holidays/countries/united_arab_emirates.py +++ b/holidays/countries/united_arab_emirates.py @@ -15,7 +15,6 @@ from holidays.calendars import _CustomIslamicHolidays from holidays.calendars.gregorian import ( FEB, - MAR, APR, MAY, JUN, @@ -143,56 +142,33 @@ class ARE(UnitedArabEmirates): class UnitedArabEmiratesIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2017, 2025) EID_AL_ADHA_DATES = { - 2017: (SEP, 1), 2018: (AUG, 22), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), - 2024: (JUN, 16), 2025: (JUN, 4), } - EID_AL_FITR_DATES = { - 2017: (JUN, 25), - 2018: (JUN, 15), - 2019: (JUN, 4), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), - 2023: (APR, 21), - 2024: (APR, 10), - 2025: (MAR, 30), - } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2017, 2025) + HIJRI_NEW_YEAR_DATES_CONFIRMED_YEARS = (2017, 2025) HIJRI_NEW_YEAR_DATES = { 2017: (SEP, 22), - 2018: (SEP, 11), - 2019: (AUG, 31), 2020: (AUG, 23), 2021: (AUG, 12), - 2022: (JUL, 30), 2023: (JUL, 21), - 2024: (JUL, 7), - 2025: (JUN, 26), } + ISRA_AND_MIRAJ_DATES_CONFIRMED_YEARS = (2017, 2018) ISRA_AND_MIRAJ_DATES = { 2017: (APR, 23), 2018: (APR, 14), } + MAWLID_DATES_CONFIRMED_YEARS = (2017, 2025) MAWLID_DATES = { - 2017: (NOV, 30), 2018: (NOV, 18), - 2019: (NOV, 9), - 2020: (OCT, 29), 2021: (OCT, 21), - 2022: (OCT, 8), 2023: (SEP, 29), - 2024: (SEP, 15), 2025: (SEP, 5), } diff --git a/holidays/countries/uzbekistan.py b/holidays/countries/uzbekistan.py index 4e97619d0..124b9574e 100644 --- a/holidays/countries/uzbekistan.py +++ b/holidays/countries/uzbekistan.py @@ -14,7 +14,7 @@ from gettext import gettext as tr from holidays.calendars import _CustomIslamicHolidays -from holidays.calendars.gregorian import JAN, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC +from holidays.calendars.gregorian import JAN, MAR, APR, MAY, JUN, JUL, AUG, SEP, DEC from holidays.groups import InternationalHolidays, IslamicHolidays, StaticHolidays from holidays.observed_holiday_base import ObservedHolidayBase, SAT_SUN_TO_NEXT_WORKDAY @@ -113,50 +113,22 @@ class UZB(Uzbekistan): class UzbekistanIslamicHolidays(_CustomIslamicHolidays): + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2006, 2025) EID_AL_ADHA_DATES = { 2006: ((JAN, 10), (DEC, 30)), 2007: (DEC, 19), - 2008: (DEC, 8), - 2009: (NOV, 27), - 2010: (NOV, 16), - 2011: (NOV, 6), - 2012: (OCT, 26), - 2013: (OCT, 15), - 2014: (OCT, 4), 2015: (SEP, 24), 2016: (SEP, 12), - 2017: (SEP, 1), - 2018: (AUG, 21), - 2019: (AUG, 11), - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), - 2024: (JUN, 16), - 2025: (JUN, 6), } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2006, 2025) EID_AL_FITR_DATES = { - 2006: (OCT, 23), - 2007: (OCT, 13), - 2008: (OCT, 1), 2009: (SEP, 21), - 2010: (SEP, 10), 2011: (AUG, 31), - 2012: (AUG, 19), 2013: (AUG, 9), - 2014: (JUL, 28), 2015: (JUL, 18), - 2016: (JUL, 6), 2017: (JUN, 26), - 2018: (JUN, 15), 2019: (JUN, 5), - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), - 2023: (APR, 21), - 2024: (APR, 10), - 2025: (MAR, 30), } diff --git a/holidays/countries/yemen.py b/holidays/countries/yemen.py index ed71e01b9..fb08ab500 100644 --- a/holidays/countries/yemen.py +++ b/holidays/countries/yemen.py @@ -13,22 +13,7 @@ from gettext import gettext as tr from holidays.calendars import _CustomIslamicHolidays -from holidays.calendars.gregorian import ( - JAN, - FEB, - MAR, - APR, - MAY, - JUN, - JUL, - AUG, - SEP, - OCT, - THU, - FRI, - SAT, - _timedelta, -) +from holidays.calendars.gregorian import AUG, THU, FRI, SAT, _timedelta from holidays.constants import PUBLIC, SCHOOL, WORKDAY from holidays.groups import InternationalHolidays, IslamicHolidays from holidays.observed_holiday_base import ObservedHolidayBase, FRI_TO_NEXT_WORKDAY @@ -156,52 +141,23 @@ class YEM(Yemen): class YemenIslamicHolidays(_CustomIslamicHolidays): # https://web.archive.org/web/20250115070635/https://www.timeanddate.com/holidays/yemen/eid-al-adha-first-day - EID_AL_ADHA_DATES = { - 2020: (JUL, 31), - 2021: (JUL, 20), - 2022: (JUL, 9), - 2023: (JUN, 28), - 2024: (JUN, 16), - } + + EID_AL_ADHA_DATES_CONFIRMED_YEARS = (2020, 2024) # https://web.archive.org/web/20250218061345/https://www.timeanddate.com/holidays/yemen/eid-al-fitr-first-day - EID_AL_FITR_DATES = { - 2020: (MAY, 24), - 2021: (MAY, 13), - 2022: (MAY, 2), - 2023: (APR, 21), - 2024: (APR, 10), - 2025: (MAR, 30), - } + EID_AL_FITR_DATES_CONFIRMED_YEARS = (2020, 2025) # https://web.archive.org/web/20241011200213/https://www.timeanddate.com/holidays/yemen/muharram-new-year + HIJRI_NEW_YEAR_DATES_CONFIRMED_YEARS = (2020, 2024) HIJRI_NEW_YEAR_DATES = { - 2020: (AUG, 20), 2021: (AUG, 10), - 2022: (JUL, 30), - 2023: (JUL, 19), - 2024: (JUL, 7), } # https://web.archive.org/web/20241010083000/https://www.timeanddate.com/holidays/yemen/isra-miraj - ISRA_AND_MIRAJ_DATES = { - 2023: (FEB, 18), - 2024: (FEB, 8), - 2025: (JAN, 27), - } + ISRA_AND_MIRAJ_DATES_CONFIRMED_YEARS = (2023, 2025) # https://web.archive.org/web/20241010222331/https://www.timeanddate.com/holidays/yemen/prophet-birthday - MAWLID_DATES = { - 2020: (OCT, 29), - 2021: (OCT, 18), - 2022: (OCT, 8), - 2023: (SEP, 27), - 2024: (SEP, 15), - } + MAWLID_DATES_CONFIRMED_YEARS = (2020, 2024) # https://web.archive.org/web/20250119111122/https://www.timeanddate.com/holidays/yemen/ramadan-begins - RAMADAN_BEGINNING_DATES = { - 2023: (MAR, 23), - 2024: (MAR, 11), - 2025: (MAR, 1), - } + RAMADAN_BEGINNING_DATES_CONFIRMED_YEARS = (2023, 2025) diff --git a/snapshots/countries/NE_COMMON.json b/snapshots/countries/NE_COMMON.json index 48b735355..7aa2e88ff 100644 --- a/snapshots/countries/NE_COMMON.json +++ b/snapshots/countries/NE_COMMON.json @@ -934,8 +934,8 @@ "2015-07-18": "Eid al-Fitr", "2015-08-03": "Anniversary of the Proclamation of Independence", "2015-08-15": "Assumption Day", - "2015-09-23": "Eid al-Adha (estimated)", - "2015-09-24": "Day after Eid al-Adha (estimated)", + "2015-09-24": "Eid al-Adha", + "2015-09-25": "Day after Eid al-Adha", "2015-10-15": "Islamic New Year", "2015-11-01": "All Saints' Day", "2015-11-02": "All Saints' Day (observed)", From 6f1851bd59ffd2c00738707a2cae33907b6caeae Mon Sep 17 00:00:00 2001 From: ~Jhellico Date: Tue, 5 Aug 2025 19:10:55 +0300 Subject: [PATCH 6/6] Update Chinese calendar --- holidays/calendars/chinese.py | 18 +++++++++++++---- holidays/countries/christmas_island.py | 1 + holidays/countries/indonesia.py | 20 +----------------- holidays/countries/malaysia.py | 28 +------------------------- holidays/countries/philippines.py | 17 +--------------- holidays/countries/singapore.py | 25 +---------------------- 6 files changed, 19 insertions(+), 90 deletions(-) diff --git a/holidays/calendars/chinese.py b/holidays/calendars/chinese.py index 0e3205ef1..b4e3ef3c5 100644 --- a/holidays/calendars/chinese.py +++ b/holidays/calendars/chinese.py @@ -1325,11 +1325,21 @@ def __verify_calendar(calendar): def _get_holiday(self, holiday: str, year: int, calendar=None) -> tuple[Optional[date], bool]: calendar = calendar or self.__calendar self.__verify_calendar(calendar) - custom_calendar_dates = getattr(self, f"{calendar}_{holiday}_DATES", {}) + confirmed_dates = getattr( + self, f"{holiday}_DATES_{_CustomCalendar.CUSTOM_ATTR_POSTFIX}", {} + ) + confirmed_years = getattr( + self, f"{holiday}_DATES_CONFIRMED_YEARS_{_CustomCalendar.CUSTOM_ATTR_POSTFIX}", (0, 0) + ) estimated_dates = getattr(self, f"{holiday}_DATES", {}) - exact_dates = getattr(self, f"{holiday}_DATES_{_CustomCalendar.CUSTOM_ATTR_POSTFIX}", {}) - dt = exact_dates.get(year, custom_calendar_dates.get(year, estimated_dates.get(year, ()))) - return date(year, *dt) if dt else None, year not in exact_dates + custom_calendar_dates = getattr(self, f"{calendar}_{holiday}_DATES", {}) + dt = confirmed_dates.get( + year, custom_calendar_dates.get(year, estimated_dates.get(year, ())) + ) + is_confirmed = year in confirmed_dates or ( + confirmed_years[0] <= year <= confirmed_years[1] + ) + return date(year, *dt) if dt else None, not is_confirmed def buddha_birthday_date(self, year: int, calendar=None) -> tuple[Optional[date], bool]: return self._get_holiday(BUDDHA_BIRTHDAY, year, calendar) diff --git a/holidays/countries/christmas_island.py b/holidays/countries/christmas_island.py index 60662be7b..50e72b3e6 100644 --- a/holidays/countries/christmas_island.py +++ b/holidays/countries/christmas_island.py @@ -133,6 +133,7 @@ def _populate_public_holidays(self): class ChristmasIslandChineseHolidays(_CustomChineseHolidays): + LUNAR_NEW_YEAR_DATES_CONFIRMED_YEARS = (2007, 2023) LUNAR_NEW_YEAR_DATES = { 2007: (FEB, 19), 2009: (JAN, 27), diff --git a/holidays/countries/indonesia.py b/holidays/countries/indonesia.py index a0ff3abf9..31fbf88b2 100644 --- a/holidays/countries/indonesia.py +++ b/holidays/countries/indonesia.py @@ -245,30 +245,12 @@ class IndonesiaBuddhistHolidays(_CustomBuddhistHolidays): class IndonesiaChineseHolidays(_CustomChineseHolidays): + LUNAR_NEW_YEAR_DATES_CONFIRMED_YEARS = (2003, 2025) LUNAR_NEW_YEAR_DATES = { - 2003: (FEB, 1), - 2004: (JAN, 22), - 2005: (FEB, 9), 2006: (JAN, 30), 2007: (FEB, 19), - 2008: (FEB, 7), - 2009: (JAN, 26), 2010: (FEB, 15), - 2011: (FEB, 3), - 2012: (JAN, 23), 2013: (FEB, 11), - 2014: (JAN, 31), - 2015: (FEB, 19), - 2016: (FEB, 8), - 2017: (JAN, 28), - 2018: (FEB, 16), - 2019: (FEB, 5), - 2020: (JAN, 25), - 2021: (FEB, 12), - 2022: (FEB, 1), - 2023: (JAN, 22), - 2024: (FEB, 10), - 2025: (JAN, 29), } diff --git a/holidays/countries/malaysia.py b/holidays/countries/malaysia.py index ba24c16e7..0ad9040b3 100644 --- a/holidays/countries/malaysia.py +++ b/holidays/countries/malaysia.py @@ -609,33 +609,7 @@ class MalaysiaBuddhistHolidays(_CustomBuddhistHolidays): class MalaysiaChineseHolidays(_CustomChineseHolidays): - LUNAR_NEW_YEAR_DATES = { - 2001: (JAN, 24), - 2002: (FEB, 12), - 2003: (FEB, 1), - 2004: (JAN, 22), - 2005: (FEB, 9), - 2006: (JAN, 29), - 2007: (FEB, 18), - 2008: (FEB, 7), - 2009: (JAN, 26), - 2010: (FEB, 14), - 2011: (FEB, 3), - 2012: (JAN, 23), - 2013: (FEB, 10), - 2014: (JAN, 31), - 2015: (FEB, 19), - 2016: (FEB, 8), - 2017: (JAN, 28), - 2018: (FEB, 16), - 2019: (FEB, 5), - 2020: (JAN, 25), - 2021: (FEB, 12), - 2022: (FEB, 1), - 2023: (JAN, 22), - 2024: (FEB, 10), - 2025: (JAN, 29), - } + LUNAR_NEW_YEAR_DATES_CONFIRMED_YEARS = (2001, 2025) class MalaysiaHinduHolidays(_CustomHinduHolidays): diff --git a/holidays/countries/philippines.py b/holidays/countries/philippines.py index 08b3902a1..b795dfbc8 100644 --- a/holidays/countries/philippines.py +++ b/holidays/countries/philippines.py @@ -201,22 +201,7 @@ class PHL(Philippines): class PhilippinesChineseHolidays(_CustomChineseHolidays): - LUNAR_NEW_YEAR_DATES = { - 2012: (JAN, 23), - 2013: (FEB, 10), - 2014: (JAN, 31), - 2015: (FEB, 19), - 2016: (FEB, 8), - 2017: (JAN, 28), - 2018: (FEB, 16), - 2019: (FEB, 5), - 2020: (JAN, 25), - 2021: (FEB, 12), - 2022: (FEB, 1), - 2023: (JAN, 22), - 2024: (FEB, 10), - 2025: (JAN, 29), - } + LUNAR_NEW_YEAR_DATES_CONFIRMED_YEARS = (2012, 2025) class PhilippinesIslamicHolidays(_CustomIslamicHolidays): diff --git a/holidays/countries/singapore.py b/holidays/countries/singapore.py index 1a83a4368..f989f2511 100644 --- a/holidays/countries/singapore.py +++ b/holidays/countries/singapore.py @@ -182,33 +182,10 @@ class SingaporeBuddhistHolidays(_CustomBuddhistHolidays): class SingaporeChineseHolidays(_CustomChineseHolidays): + LUNAR_NEW_YEAR_DATES_CONFIRMED_YEARS = (2001, 2026) LUNAR_NEW_YEAR_DATES = { - 2001: (JAN, 24), - 2002: (FEB, 12), - 2003: (FEB, 1), - 2004: (JAN, 22), - 2005: (FEB, 9), 2006: (JAN, 30), 2007: (FEB, 19), - 2008: (FEB, 7), - 2009: (JAN, 26), - 2010: (FEB, 14), - 2011: (FEB, 3), - 2012: (JAN, 23), - 2013: (FEB, 10), - 2014: (JAN, 31), - 2015: (FEB, 19), - 2016: (FEB, 8), - 2017: (JAN, 28), - 2018: (FEB, 16), - 2019: (FEB, 5), - 2020: (JAN, 25), - 2021: (FEB, 12), - 2022: (FEB, 1), - 2023: (JAN, 22), - 2024: (FEB, 10), - 2025: (JAN, 29), - 2026: (FEB, 17), }