Repository: vacanza/holidays
Pull request #2141 (2024-11-26 15:37:28)

Introduce start/end year for entity
<!--
  Thanks for contributing to holidays!
-->

## Proposed change

<!--
  Describe the big picture of your changes.
  Don't forget to link your PR to an existing issue if any.
-->

Introduce start/end year of period in which entity holidays are defined (with default values 1901 and 2100).

## Type of change

<!--
  Type of change you want to introduce. Please, check one (1) box only!
  If your PR requires multiple boxes to be checked, most likely it needs to
  be split into multiple PRs.
-->

- [ ] New country/market holidays support (thank you!)
- [ ] Supported country/market holidays update (calendar discrepancy fix, localization)
- [ ] Existing code/documentation/test/process quality improvement (best practice, cleanup, refactoring, optimization)
- [ ] Dependency update (version deprecation/pin/upgrade)
- [ ] Bugfix (non-breaking change which fixes an issue)
- [ ] Breaking change (a code change causing existing functionality to break)
- [x] New feature (new `holidays` functionality in general)

## Checklist

<!--
  Put an `x` in the boxes that apply. You can change them after PR is created.
-->

- [x] I've followed the [contributing guidelines][contributing-guidelines]
- [x] I've successfully run `make check`, all checks and tests are green

<!--
  Thanks again for your contribution!
-->

[contributing-guidelines]: https://github.com/vacanza/holidays/blob/dev/CONTRIBUTING.rst
[docs]: https://github.com/vacanza/holidays/tree/dev/docs/source


codecov[bot]: ## [Codecov](https://app.codecov.io/gh/vacanza/holidays/pull/2141?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza) Report
All modified and coverable lines are covered by tests :white_check_mark:
> Project coverage is 100.00%. Comparing base [(`93b3ca9`)](https://app.codecov.io/gh/vacanza/holidays/commit/93b3ca994342dd79b509c23aaad28ed89dc8543c?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza) to head [(`83a6dff`)](https://app.codecov.io/gh/vacanza/holidays/commit/83a6dff1abf372401cb0f91a0e71680bf7c3ebaa?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza).

<details><summary>Additional details and impacted files</summary>


```diff
@@            Coverage Diff             @@
##               dev     #2141    +/-   ##
==========================================
  Coverage   100.00%   100.00%            
==========================================
  Files          194       194            
  Lines        11716     11559   -157     
  Branches      1771      1641   -130     
==========================================
- Hits         11716     11559   -157     
```

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/vacanza/holidays/pull/2141?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza).


Patch:
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 8bef7edb..303c4f46 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -23,7 +23,7 @@ repos:
           - --py39-plus
 
   - repo: https://github.com/astral-sh/ruff-pre-commit
-    rev: v0.8.0
+    rev: v0.8.1
     hooks:
       - id: ruff
       - id: ruff-format
diff --git a/holidays/constants.py b/holidays/constants.py
index d2ec9029..11cf37c8 100644
--- a/holidays/constants.py
+++ b/holidays/constants.py
@@ -54,3 +54,6 @@ CHRISTIAN = "christian"
 HEBREW = "hebrew"
 HINDU = "hindu"
 ISLAMIC = "islamic"
+
+DEFAULT_START_YEAR = 1901
+DEFAULT_END_YEAR = 2100
diff --git a/holidays/countries/albania.py b/holidays/countries/albania.py
index 8c612b37..5f261ca4 100644
--- a/holidays/countries/albania.py
+++ b/holidays/countries/albania.py
@@ -43,6 +43,8 @@ class Albania(
     # %s (observed, estimated).
     observed_estimated_label = tr("%s (ditë pushimi e shtyrë, e vlerësuar)")
     supported_languages = ("en_US", "sq", "uk")
+    # Law No. 7651 from 21.12.1992.
+    start_year = 1993
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -53,10 +55,6 @@ class Albania(
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Law No. 7651 from 21.12.1992.
-        if self._year <= 1992:
-            return None
-
         dts_observed = set()
 
         # New Year's Day.
diff --git a/holidays/countries/angola.py b/holidays/countries/angola.py
index 857f5e4f..3254ef4d 100644
--- a/holidays/countries/angola.py
+++ b/holidays/countries/angola.py
@@ -46,6 +46,8 @@ class Angola(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
     supported_languages = ("en_US", "pt_AO", "uk")
     # %s (observed).
     observed_label = tr("%s (ponte)")
+    # Decree #5/75.
+    start_year = 1975
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -68,10 +70,6 @@ class Angola(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
         return super()._add_observed(dt, **kwargs)
 
     def _populate_public_holidays(self):
-        # Decree #5/75.
-        if self._year <= 1974:
-            return None
-
         # New Year's Day.
         name = self.tr("Dia do Ano Novo")
         dt = self._add_new_years_day(name)
diff --git a/holidays/countries/argentina.py b/holidays/countries/argentina.py
index 4758b10e..bc5508ba 100644
--- a/holidays/countries/argentina.py
+++ b/holidays/countries/argentina.py
@@ -89,6 +89,7 @@ class Argentina(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, S
     supported_languages = ("en_US", "es", "uk")
     # %s (observed).
     observed_label = tr("%s (observado)")
+    start_year = 1801
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
diff --git a/holidays/countries/armenia.py b/holidays/countries/armenia.py
index 937e1081..2464008e 100644
--- a/holidays/countries/armenia.py
+++ b/holidays/countries/armenia.py
@@ -30,6 +30,7 @@ class Armenia(HolidayBase, ChristianHolidays, InternationalHolidays):
     country = "AM"
     default_language = "hy"
     supported_languages = ("en_US", "hy")
+    start_year = 1991
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self, JULIAN_CALENDAR)
@@ -37,9 +38,6 @@ class Armenia(HolidayBase, ChristianHolidays, InternationalHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1990:
-            return None
-
         # New Year's Day.
         name = tr("Նոր տարվա օր")
         self._add_new_years_day(name)
diff --git a/holidays/countries/aruba.py b/holidays/countries/aruba.py
index 0d9ca52f..20662b53 100644
--- a/holidays/countries/aruba.py
+++ b/holidays/countries/aruba.py
@@ -32,6 +32,8 @@ class Aruba(HolidayBase, ChristianHolidays, InternationalHolidays):
     country = "AW"
     default_language = "pap_AW"
     supported_languages = ("en_US", "nl", "pap_AW", "uk")
+    # AUG 1947: Autonomous State status in the Kingdom of the Netherlands.
+    start_year = 1947
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -39,10 +41,6 @@ class Aruba(HolidayBase, ChristianHolidays, InternationalHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # AUG 1947: Autonomous State status in the Kingdom of the Netherlands.
-        if self._year <= 1946:
-            return None
-
         # Aña Nobo.
         # Status: In-Use.
 
diff --git a/holidays/countries/australia.py b/holidays/countries/australia.py
index 2de0cf21..689aeb90 100644
--- a/holidays/countries/australia.py
+++ b/holidays/countries/australia.py
@@ -65,6 +65,7 @@ class Australia(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, S
         "Victoria": "VIC",
         "Western Australia": "WA",
     }
+    start_year = 1801
 
     @property
     def sovereign_birthday(self) -> str:
diff --git a/holidays/countries/azerbaijan.py b/holidays/countries/azerbaijan.py
index 4562f379..917215b8 100644
--- a/holidays/countries/azerbaijan.py
+++ b/holidays/countries/azerbaijan.py
@@ -25,9 +25,12 @@ from holidays.observed_holiday_base import (
 
 
 class Azerbaijan(ObservedHolidayBase, InternationalHolidays, IslamicHolidays, StaticHolidays):
-    # [1] https://en.wikipedia.org/wiki/Public_holidays_in_Azerbaijan
-    # [2] https://az.wikipedia.org/wiki/Az%C9%99rbaycan%C4%B1n_d%C3%B6vl%C9%99t_bayramlar%C4%B1_v%C9%99_x%C3%BCsusi_g%C3%BCnl%C9%99ri
-    # [3] https://www.sosial.gov.az/en/prod-calendar
+    """
+    References:
+        - https://en.wikipedia.org/wiki/Public_holidays_in_Azerbaijan
+        - https://az.wikipedia.org/wiki/Az%C9%99rbaycan%C4%B1n_d%C3%B6vl%C9%99t_bayramlar%C4%B1_v%C9%99_x%C3%BCsusi_g%C3%BCnl%C9%99ri
+        - https://www.sosial.gov.az/en/prod-calendar
+    """
 
     country = "AZ"
     default_language = "az"
@@ -39,6 +42,7 @@ class Azerbaijan(ObservedHolidayBase, InternationalHolidays, IslamicHolidays, St
     observed_estimated_label = tr("%s (müşahidə olunur, təxmini)")
     supported_categories = (PUBLIC, WORKDAY)
     supported_languages = ("az", "en_US", "uk")
+    start_year = 1990
 
     def __init__(self, *args, **kwargs):
         InternationalHolidays.__init__(self)
@@ -49,9 +53,6 @@ class Azerbaijan(ObservedHolidayBase, InternationalHolidays, IslamicHolidays, St
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1989:
-            return None
-
         dts_observed = set()
         dts_non_observed = set()
         dts_bairami = set()
@@ -246,6 +247,21 @@ class AzerbaijanIslamicHolidays(_CustomIslamicHolidays):
 
 
 class AzerbaijanStaticHolidays:
+    """
+    Substituted holidays references:
+        - https://nk.gov.az/az/senedler/qerarlar/is-va-istirahat-gunlarinin-yerlarinin-dayisdirilmasi-haqqinda-5423
+        - https://nk.gov.az/az/senedler/qerarlar/is-va-istirahat-gunlarinin-yerlarinin--dayisdirilmasi-haqqinda-5982
+        - https://nk.gov.az/az/senedler/qerarlar/is-va-istirahat-gunlarinin-yerlarinin-dayisdirilmasi-haqqinda-6488
+        - https://nk.gov.az/az/senedler/qerarlar/is-ve-istirahet-gunlerinin-yerlerinin-deyisdirilme-7047
+        - https://nk.gov.az/az/senedler/qerarlar/is-ve-istirahet-gunlerinin-yerlerinin-deyisdirilme-7466
+        - https://nk.gov.az/az/senedler/qerarlar/is-ve-istirahet-gunlerinin-yerlerinin-deyisdirilme-7576
+        - https://nk.gov.az/az/senedler/qerarlar/is-ve-istirahet-gunlerinin-yerlerinin-deyisdirilme-7843
+        - https://nk.gov.az/az/senedler/qerarlar/is-ve-istirahet-gunlerinin-yerlerinin-deyisdirilme-8332
+        - https://nk.gov.az/az/senedler/qerarlar/is-ve-istirahet-gunlerinin-yerlerinin-deyisdirilme-8449
+    Special holidays references:
+        - https://www.msk.gov.az/en/elections/pages/municipal-elections/belediyye-29-01-2025
+    """
+
     eid_al_adha = tr("Qurban bayrami")
     # Substituted date format.
     substituted_date_format = tr("%d.%m.%Y")
@@ -255,6 +271,9 @@ class AzerbaijanStaticHolidays:
     # Presidential elections.
     presidential_elections = tr("Prezidenti seçkiləri")
 
+    # Municipal elections.
+    municipal_elections = tr("Bələdiyyə seçkiləri")
+
     special_public_holidays = {
         2011: (AUG, 29, AUG, 27),
         2013: (
@@ -266,8 +285,7 @@ class AzerbaijanStaticHolidays:
             (JAN, 6, DEC, 29, 2013),
         ),
         2018: (APR, 11, presidential_elections),
-        # Municipal elections.
-        2019: (DEC, 27, tr("Bələdiyyə seçkiləri")),
+        2019: (DEC, 27, municipal_elections),
         2020: (
             (MAR, 27, MAR, 29),
             (MAY, 27, MAY, 30),
@@ -295,6 +313,11 @@ class AzerbaijanStaticHolidays:
             (APR, 12, APR, 6),
             (NOV, 12, NOV, 16),
             (NOV, 13, NOV, 23),
+            (DEC, 30, DEC, 28),
+        ),
+        2025: (
+            (JAN, 3, DEC, 29, 2024),
+            (JAN, 29, municipal_elections),
         ),
     }
 
diff --git a/holidays/countries/bahamas.py b/holidays/countries/bahamas.py
index f7eb6e7c..17eeafa8 100644
--- a/holidays/countries/bahamas.py
+++ b/holidays/countries/bahamas.py
@@ -39,6 +39,8 @@ class Bahamas(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Sta
 
     country = "BS"
     observed_label = "%s (observed)"
+    # Gained Independence on Jul 10, 1973.
+    start_year = 1974
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -48,10 +50,6 @@ class Bahamas(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Sta
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Gained Independence on Jul 10, 1973.
-        if self._year <= 1973:
-            return None
-
         # New Year's Day.
         # Pre-2012 Observance:
         # - If TUE, New Year's Day (observed) prev MON.
diff --git a/holidays/countries/barbados.py b/holidays/countries/barbados.py
index 00c124b3..483eb471 100644
--- a/holidays/countries/barbados.py
+++ b/holidays/countries/barbados.py
@@ -33,6 +33,8 @@ class Barbados(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, St
 
     country = "BB"
     observed_label = "%s (observed)"
+    # Public Holidays Act Cap.352, 1968-12-30
+    start_year = 1969
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -42,10 +44,6 @@ class Barbados(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, St
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Public Holidays Act Cap.352, 1968-12-30
-        if self._year <= 1968:
-            return None
-
         # New Year's Day
         self._add_observed(self._add_new_years_day("New Year's Day"))
 
diff --git a/holidays/countries/belarus.py b/holidays/countries/belarus.py
index d209f096..3794fa55 100644
--- a/holidays/countries/belarus.py
+++ b/holidays/countries/belarus.py
@@ -33,6 +33,8 @@ class Belarus(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
     country = "BY"
     default_language = "be"
     supported_languages = ("be", "en_US")
+    # The current set of holidays actual from 1998.
+    start_year = 1998
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self, JULIAN_CALENDAR)
@@ -41,10 +43,6 @@ class Belarus(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # The current set of holidays actual from 1998.
-        if self._year <= 1997:
-            return None
-
         # New Year's Day.
         self._add_new_years_day(tr("Новы год"))
 
diff --git a/holidays/countries/belize.py b/holidays/countries/belize.py
index 3a943c9a..fc440492 100644
--- a/holidays/countries/belize.py
+++ b/holidays/countries/belize.py
@@ -30,6 +30,8 @@ class Belize(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
 
     country = "BZ"
     observed_label = "%s (observed)"
+    # Belize was granted independence on 21.09.1981.
+    start_year = 1982
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -42,10 +44,6 @@ class Belize(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Belize was granted independence on 21.09.1981.
-        if self._year <= 1981:
-            return None
-
         # New Year's Day.
         self._move_holiday(self._add_new_years_day("New Year's Day"))
 
diff --git a/holidays/countries/bolivia.py b/holidays/countries/bolivia.py
index 623f0d5a..76afdc02 100644
--- a/holidays/countries/bolivia.py
+++ b/holidays/countries/bolivia.py
@@ -51,6 +51,7 @@ class Bolivia(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
         "S",  # Santa Cruz
         "T",  # Tarija
     )
+    start_year = 1825
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -61,9 +62,6 @@ class Bolivia(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1824:
-            return None
-
         # New Year's Day.
         self._add_observed(self._add_new_years_day(tr("Año Nuevo")))
 
diff --git a/holidays/countries/botswana.py b/holidays/countries/botswana.py
index e898a17f..239cf78f 100644
--- a/holidays/countries/botswana.py
+++ b/holidays/countries/botswana.py
@@ -30,6 +30,7 @@ class Botswana(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, St
 
     country = "BW"
     observed_label = "%s (observed)"
+    start_year = 1966
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -40,9 +41,6 @@ class Botswana(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, St
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1965:
-            return None
-
         self._add_observed(self._add_new_years_day("New Year's Day"), rule=SUN_TO_NEXT_TUE)
         self._add_observed(self._add_new_years_day_two("New Year's Day Holiday"))
 
diff --git a/holidays/countries/brazil.py b/holidays/countries/brazil.py
index 501755bf..e79a6d16 100644
--- a/holidays/countries/brazil.py
+++ b/holidays/countries/brazil.py
@@ -92,6 +92,8 @@ class Brazil(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
 
     supported_categories = (OPTIONAL, PUBLIC)
     supported_languages = ("en_US", "pt_BR", "uk")
+    # Decreto n. 155-B, de 14.01.1890
+    start_year = 1890
 
     def __init__(self, *args, **kwargs) -> None:
         ChristianHolidays.__init__(self)
@@ -99,10 +101,6 @@ class Brazil(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Decreto n. 155-B, de 14.01.1890
-        if self._year <= 1889:
-            return None
-
         # Universal Fraternization Day.
         self._add_new_years_day(tr("Confraternização Universal"))
 
@@ -158,9 +156,6 @@ class Brazil(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
             self._add_christmas_day(tr("Natal"))
 
     def _populate_optional_holidays(self):
-        if self._year <= 1889:
-            return None
-
         # Carnival.
         name = tr("Carnaval")
         self._add_carnival_monday(name)
diff --git a/holidays/countries/brunei.py b/holidays/countries/brunei.py
index 9327613d..9737a90d 100644
--- a/holidays/countries/brunei.py
+++ b/holidays/countries/brunei.py
@@ -127,6 +127,8 @@ class Brunei(
     observed_estimated_label = tr("%s (diperhatikan, anggaran)")
     supported_languages = ("en_US", "ms", "th")
     weekend = {FRI, SUN}
+    # Available post-Independence from 1984 afterwards
+    start_year = 1984
 
     def __init__(self, *args, **kwargs):
         ChineseCalendarHolidays.__init__(self)
@@ -138,10 +140,6 @@ class Brunei(
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Available post-Independence from 1984 afterwards
-        if self._year <= 1983:
-            return None
-
         # Awal Tahun Masihi
         # Status: In-Use.
 
diff --git a/holidays/countries/bulgaria.py b/holidays/countries/bulgaria.py
index d6a75aff..df43b9ce 100644
--- a/holidays/countries/bulgaria.py
+++ b/holidays/countries/bulgaria.py
@@ -48,6 +48,7 @@ class Bulgaria(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
     observed_label = tr("%s (почивен ден)")
     supported_categories = (PUBLIC, SCHOOL)
     supported_languages = ("bg", "en_US", "uk")
+    start_year = 1990
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self, JULIAN_REVISED_CALENDAR)
@@ -65,9 +66,6 @@ class Bulgaria(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
                     self._add_observed(dt, name)
 
     def _populate_public_holidays(self):
-        if self._year <= 1989:
-            return None
-
         dts_observed = set()
 
         # New Year's Day.
@@ -129,9 +127,6 @@ class Bulgaria(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
             )
 
     def _populate_school_holidays(self):
-        if self._year <= 1989:
-            return None
-
         # National Awakening Day.
         self._add_holiday_nov_1(tr("Ден на народните будители"))
 
diff --git a/holidays/countries/burkina_faso.py b/holidays/countries/burkina_faso.py
index 52add844..94a05231 100644
--- a/holidays/countries/burkina_faso.py
+++ b/holidays/countries/burkina_faso.py
@@ -24,6 +24,9 @@ class BurkinaFaso(ObservedHolidayBase, ChristianHolidays, InternationalHolidays,
 
     country = "BF"
     observed_label = "%s (observed)"
+    # On 5 August 1960, Burkina Faso (Republic of Upper Volta at that time)
+    # gained independence from France.
+    start_year = 1961
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -33,11 +36,6 @@ class BurkinaFaso(ObservedHolidayBase, ChristianHolidays, InternationalHolidays,
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # On 5 August 1960, Burkina Faso (Republic of Upper Volta at that time)
-        # gained independence from France.
-        if self._year <= 1960:
-            return None
-
         # New Year's Day.
         self._add_observed(self._add_new_years_day("New Year's Day"))
 
diff --git a/holidays/countries/burundi.py b/holidays/countries/burundi.py
index 1cfcf2cf..6277db6e 100644
--- a/holidays/countries/burundi.py
+++ b/holidays/countries/burundi.py
@@ -28,6 +28,7 @@ class Burundi(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Isl
 
     country = "BI"
     observed_label = "%s (observed)"
+    start_year = 1962
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -37,9 +38,6 @@ class Burundi(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Isl
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1961:
-            return None
-
         # New Year's Day
         self._add_observed(self._add_new_years_day("New Year's Day"))
 
diff --git a/holidays/countries/cambodia.py b/holidays/countries/cambodia.py
index 966faa46..88393cc4 100644
--- a/holidays/countries/cambodia.py
+++ b/holidays/countries/cambodia.py
@@ -52,6 +52,8 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH
     country = "KH"
     default_language = "km"
     supported_languages = ("en_US", "km", "th")
+    # Available post-Independence from 1993 afterwards
+    start_year = 1993
 
     def __init__(self, *args, **kwargs):
         InternationalHolidays.__init__(self)
@@ -60,10 +62,6 @@ class Cambodia(HolidayBase, InternationalHolidays, StaticHolidays, ThaiCalendarH
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Available post-Independence from 1993 afterwards
-        if self._year <= 1992:
-            return None
-
         # Fixed Holidays
 
         #  ទិវាចូលឆ្នាំសាកល
diff --git a/holidays/countries/cameroon.py b/holidays/countries/cameroon.py
index d68d01c6..0f4dc05e 100644
--- a/holidays/countries/cameroon.py
+++ b/holidays/countries/cameroon.py
@@ -33,6 +33,8 @@ class Cameroon(
 
     country = "CM"
     observed_label = "%s (observed)"
+    # On 1 January 1960, French Cameroun gained independence from France.
+    start_year = 1960
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -43,10 +45,6 @@ class Cameroon(
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # On 1 January 1960, French Cameroun gained independence from France.
-        if self._year <= 1959:
-            return None
-
         dts_observed = set()
 
         # New Year's Day.
diff --git a/holidays/countries/canada.py b/holidays/countries/canada.py
index e0379f6a..6247e0cc 100644
--- a/holidays/countries/canada.py
+++ b/holidays/countries/canada.py
@@ -63,6 +63,7 @@ class Canada(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
         "YT",
     )
     supported_languages = ("ar", "en_CA", "en_US", "fr", "th")
+    start_year = 1867
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -100,9 +101,6 @@ class Canada(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
         self._add_christmas_day(tr("Christmas Day"))
 
     def _populate_public_holidays(self):
-        if self._year <= 1866:
-            return None
-
         self._add_statutory_holidays()
 
         self._add_observed(self._christmas_day)
@@ -110,9 +108,6 @@ class Canada(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
     def _populate_government_holidays(self):
         """Holidays for federally regulated workplaces."""
 
-        if self._year <= 1866:
-            return None
-
         self._add_statutory_holidays()
 
         if self._year >= 1953:
@@ -142,9 +137,6 @@ class Canada(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
         )
 
     def _populate_optional_holidays(self):
-        if self._year <= 1866:
-            return None
-
         # Christmas Day.
         self._add_observed(
             self._add_christmas_day(tr("Christmas Day")), rule=SAT_SUN_TO_NEXT_MON_TUE
diff --git a/holidays/countries/chad.py b/holidays/countries/chad.py
index 0c4ea459..2da7820d 100644
--- a/holidays/countries/chad.py
+++ b/holidays/countries/chad.py
@@ -32,6 +32,8 @@ class Chad(
 
     country = "TD"
     observed_label = "%s (observed)"
+    # On 11 August 1960, Chad gained independence from France.
+    start_year = 1961
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -42,10 +44,6 @@ class Chad(
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # On 11 August 1960, Chad gained independence from France.
-        if self._year <= 1960:
-            return None
-
         # New Year's Day.
         self._add_observed(self._add_new_years_day("New Year's Day"))
 
diff --git a/holidays/countries/chile.py b/holidays/countries/chile.py
index d9d49cb1..4c08d74e 100644
--- a/holidays/countries/chile.py
+++ b/holidays/countries/chile.py
@@ -79,6 +79,7 @@ class Chile(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stati
     )
     supported_categories = (BANK, PUBLIC)
     supported_languages = ("en_US", "es", "uk")
+    start_year = 1915
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -89,9 +90,6 @@ class Chile(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stati
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1914:
-            return None
-
         # New Year's Day.
         self._add_new_years_day(tr("Año Nuevo"))
         if self._year >= 2017:
diff --git a/holidays/countries/china.py b/holidays/countries/china.py
index 7ee9af62..ea532536 100644
--- a/holidays/countries/china.py
+++ b/holidays/countries/china.py
@@ -69,6 +69,8 @@ class China(ObservedHolidayBase, ChineseCalendarHolidays, InternationalHolidays,
     supported_categories = (PUBLIC, HALF_DAY)
     default_language = "zh_CN"
     supported_languages = ("en_US", "th", "zh_CN", "zh_TW")
+    # Proclamation of the People's Republic of China on Oct 1, 1949.
+    start_year = 1950
 
     def __init__(self, *args, **kwargs):
         ChineseCalendarHolidays.__init__(self)
@@ -79,10 +81,6 @@ class China(ObservedHolidayBase, ChineseCalendarHolidays, InternationalHolidays,
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Proclamation of the People's Republic of China on Oct 1, 1949.
-        if self._year <= 1949:
-            return None
-
         dts_observed = set()
 
         # 元旦 (simp.) / 新年 (trad.)
@@ -186,9 +184,6 @@ class China(ObservedHolidayBase, ChineseCalendarHolidays, InternationalHolidays,
 
     def _populate_half_day_holidays(self):
         # No in lieus are given for this category.
-        # Proclamation of the People's Republic of China on Oct 1, 1949.
-        if self._year <= 1949:
-            return None
 
         # International Women's Day.
         self._add_womens_day(tr("国际妇女节"))
diff --git a/holidays/countries/congo.py b/holidays/countries/congo.py
index 5c8b7efa..bc8357ff 100644
--- a/holidays/countries/congo.py
+++ b/holidays/countries/congo.py
@@ -31,6 +31,8 @@ class Congo(HolidayBase, ChristianHolidays, InternationalHolidays):
     country = "CG"
     default_language = "fr"
     supported_languages = ("en_US", "fr")
+    # Loi N° 2-94 of 1 March 1994.
+    start_year = 1994
 
     def __init__(self, *args, **kwargs) -> None:
         ChristianHolidays.__init__(self)
@@ -38,10 +40,6 @@ class Congo(HolidayBase, ChristianHolidays, InternationalHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Loi N° 2-94 of 1 March 1994
-        if self._year <= 1993:
-            return None
-
         # New Year's Day.
         self._add_new_years_day(tr("Jour de l'An"))
 
diff --git a/holidays/countries/croatia.py b/holidays/countries/croatia.py
index ed22e7cb..c4a82f9b 100644
--- a/holidays/countries/croatia.py
+++ b/holidays/countries/croatia.py
@@ -27,6 +27,7 @@ class Croatia(HolidayBase, ChristianHolidays, InternationalHolidays):
     country = "HR"
     default_language = "hr"
     supported_languages = ("en_US", "hr", "uk")
+    start_year = 1992
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -34,9 +35,6 @@ class Croatia(HolidayBase, ChristianHolidays, InternationalHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1991:
-            return None
-
         # New Year's Day.
         self._add_new_years_day(tr("Nova godina"))
 
diff --git a/holidays/countries/cuba.py b/holidays/countries/cuba.py
index 03556fa0..32ce1567 100644
--- a/holidays/countries/cuba.py
+++ b/holidays/countries/cuba.py
@@ -36,6 +36,8 @@ class Cuba(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
     # %s (observed).
     observed_label = tr("%s (observado)")
     supported_languages = ("en_US", "es", "uk")
+    # This calendar only works from 1959 onwards.
+    start_year = 1959
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -44,10 +46,6 @@ class Cuba(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # This calendar only works from 1959 onwards.
-        if self._year <= 1958:
-            return None
-
         # Liberation Day.
         jan_1 = self._add_holiday_jan_1(tr("Triunfo de la Revolución"))
         if self._year <= 2013:
diff --git a/holidays/countries/curacao.py b/holidays/countries/curacao.py
index 49725a97..5fd3b2d0 100644
--- a/holidays/countries/curacao.py
+++ b/holidays/countries/curacao.py
@@ -29,6 +29,8 @@ class Curacao(HolidayBase, ChristianHolidays, InternationalHolidays):
     default_language = "pap_CW"
     supported_categories = (HALF_DAY, PUBLIC)
     supported_languages = ("en_US", "nl", "pap_CW", "uk")
+    # 1954: Creation of the Netherlands Antilles.
+    start_year = 1954
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -36,10 +38,6 @@ class Curacao(HolidayBase, ChristianHolidays, InternationalHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # 1954: Creation of the Netherlands Antilles.
-        if self._year <= 1953:
-            return None
-
         # Aña Nobo.
         # Status: In-Use.
 
@@ -136,9 +134,6 @@ class Curacao(HolidayBase, ChristianHolidays, InternationalHolidays):
         self._add_christmas_day_two(tr("Di dos dia di Pasku di Nasementu"))
 
     def _populate_half_day_holidays(self):
-        if self._year <= 1953:
-            return None
-
         # New Year's Eve.
         self._add_new_years_eve(tr("Vispu di Aña Nobo"))
 
diff --git a/holidays/countries/cyprus.py b/holidays/countries/cyprus.py
index f3aac8a1..42563430 100644
--- a/holidays/countries/cyprus.py
+++ b/holidays/countries/cyprus.py
@@ -31,6 +31,7 @@ class Cyprus(HolidayBase, ChristianHolidays, InternationalHolidays):
     default_language = "el"
     supported_categories = (BANK, OPTIONAL, PUBLIC)
     supported_languages = ("el", "en_CY", "en_US", "uk")
+    start_year = 1961
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self, JULIAN_REVISED_CALENDAR)
@@ -38,9 +39,6 @@ class Cyprus(HolidayBase, ChristianHolidays, InternationalHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1960:
-            return None
-
         # New Year's Day.
         self._add_new_years_day(tr("Πρωτοχρονιά"))
 
@@ -88,16 +86,10 @@ class Cyprus(HolidayBase, ChristianHolidays, InternationalHolidays):
         self._add_christmas_day_two(tr("Επομένη Χριστουγέννων"))
 
     def _populate_bank_holidays(self):
-        if self._year <= 1960:
-            return None
-
         # Easter Tuesday.
         self._add_easter_tuesday(tr("Τρίτη της Διακαινησίμου"))
 
     def _populate_optional_holidays(self):
-        if self._year <= 1960:
-            return None
-
         # Holy Saturday.
         self._add_holy_saturday(tr("Μεγάλο Σάββατο"))
 
diff --git a/holidays/countries/djibouti.py b/holidays/countries/djibouti.py
index a9338122..0b516eb2 100644
--- a/holidays/countries/djibouti.py
+++ b/holidays/countries/djibouti.py
@@ -24,6 +24,8 @@ class Djibouti(HolidayBase, ChristianHolidays, IslamicHolidays, InternationalHol
     estimated_label = tr("%s (estimé)")
     supported_languages = ("ar", "en_US", "fr")
     weekend = {FRI, SAT}
+    # On 27 June 1977, Djibouti gained independence from France.
+    start_year = 1978
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -32,10 +34,6 @@ class Djibouti(HolidayBase, ChristianHolidays, IslamicHolidays, InternationalHol
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # On 27 June 1977, Djibouti gained independence from France.
-        if self._year <= 1977:
-            return None
-
         # New Year's Day.
         self._add_new_years_day(tr("Nouvel an"))
 
diff --git a/holidays/countries/dominica.py b/holidays/countries/dominica.py
index aeb36bc2..f3174828 100644
--- a/holidays/countries/dominica.py
+++ b/holidays/countries/dominica.py
@@ -39,6 +39,8 @@ class Dominica(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, St
 
     country = "DM"
     observed_label = "%s (observed)"
+    # Public Holidays Act, L.I. 12 of 1990 Amendment.
+    start_year = 1990
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -48,10 +50,6 @@ class Dominica(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, St
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Public Holidays Act, L.I. 12 of 1990 Amendment.
-        if self._year <= 1989:
-            return None
-
         # New Year's Day.
         self._add_observed(self._add_new_years_day("New Year's Day"))
 
diff --git a/holidays/countries/dominican_republic.py b/holidays/countries/dominican_republic.py
index d0a02c4b..c3cc4404 100644
--- a/holidays/countries/dominican_republic.py
+++ b/holidays/countries/dominican_republic.py
@@ -30,6 +30,8 @@ class DominicanRepublic(ObservedHolidayBase, ChristianHolidays, InternationalHol
     country = "DO"
     default_language = "es"
     supported_languages = ("en_US", "es", "uk")
+    # Law No. 139-97 - Holidays Dominican Republic (Jun 27, 1997).
+    start_year = 1998
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -38,10 +40,6 @@ class DominicanRepublic(ObservedHolidayBase, ChristianHolidays, InternationalHol
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Law No. 139-97 - Holidays Dominican Republic (Jun 27, 1997).
-        if self._year <= 1997:
-            return None
-
         # New Year's Day.
         self._add_new_years_day(tr("Año Nuevo"))
 
diff --git a/holidays/countries/eswatini.py b/holidays/countries/eswatini.py
index d6396335..81768359 100644
--- a/holidays/countries/eswatini.py
+++ b/holidays/countries/eswatini.py
@@ -25,6 +25,7 @@ class Eswatini(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, St
 
     country = "SZ"
     observed_label = "%s (observed)"
+    start_year = 1939
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -35,10 +36,6 @@ class Eswatini(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, St
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Observed since 1939
-        if self._year <= 1938:
-            return None
-
         self._add_observed(self._add_new_years_day("New Year's Day"))
 
         self._add_good_friday("Good Friday")
diff --git a/holidays/countries/ethiopia.py b/holidays/countries/ethiopia.py
index 63da9f10..674ee9ed 100644
--- a/holidays/countries/ethiopia.py
+++ b/holidays/countries/ethiopia.py
@@ -31,6 +31,7 @@ class Ethiopia(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHol
     # %s (estimated).
     estimated_label = tr("%s (ግምት)")
     supported_languages = ("am", "ar", "en_US")
+    start_year = 1898
 
     def _is_leap_year(self):
         """
@@ -49,9 +50,6 @@ class Ethiopia(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHol
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1897:
-            return None
-
         # Christmas Day.
         self._add_christmas_day(tr("ገና"))
 
diff --git a/holidays/countries/finland.py b/holidays/countries/finland.py
index b40e0788..6797cc1f 100644
--- a/holidays/countries/finland.py
+++ b/holidays/countries/finland.py
@@ -35,6 +35,7 @@ class Finland(HolidayBase, ChristianHolidays, InternationalHolidays):
     default_language = "fi"
     supported_languages = ("en_US", "fi", "sv_FI", "uk")
     supported_categories = (PUBLIC, UNOFFICIAL)
+    start_year = 1853
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
diff --git a/holidays/countries/france.py b/holidays/countries/france.py
index 28623497..e0786b90 100644
--- a/holidays/countries/france.py
+++ b/holidays/countries/france.py
@@ -62,6 +62,7 @@ class France(HolidayBase, ChristianHolidays, InternationalHolidays):
         "Saint-Martin",
         "Wallis-et-Futuna",
     )
+    start_year = 1801
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
diff --git a/holidays/countries/gabon.py b/holidays/countries/gabon.py
index 8ac8aeab..26f6d23d 100644
--- a/holidays/countries/gabon.py
+++ b/holidays/countries/gabon.py
@@ -26,6 +26,8 @@ class Gabon(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolida
     """
 
     country = "GA"
+    # On 17 August 1960, Gabon gained independence from France.
+    start_year = 1961
 
     def __init__(self, *args, **kwargs) -> None:
         ChristianHolidays.__init__(self)
@@ -34,10 +36,6 @@ class Gabon(HolidayBase, ChristianHolidays, InternationalHolidays, IslamicHolida
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # On 17 August 1960, Gabon gained independence from France.
-        if self._year <= 1960:
-            return None
-
         # New Year's Day.
         self._add_new_years_day("New Year's Day")
 
diff --git a/holidays/countries/georgia.py b/holidays/countries/georgia.py
index d6803436..5b43f75c 100644
--- a/holidays/countries/georgia.py
+++ b/holidays/countries/georgia.py
@@ -32,6 +32,7 @@ class Georgia(HolidayBase, ChristianHolidays, InternationalHolidays):
     supported_categories = (GOVERNMENT, PUBLIC)
     default_language = "ka"
     supported_languages = ("en_US", "ka", "uk")
+    start_year = 1991
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self, JULIAN_CALENDAR)
@@ -40,9 +41,6 @@ class Georgia(HolidayBase, ChristianHolidays, InternationalHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1990:
-            return None
-
         # New Year's Day.
         name = tr("ახალი წელი")
         self._add_new_years_day(name)
diff --git a/holidays/countries/germany.py b/holidays/countries/germany.py
index e4f6cc70..9a61b958 100644
--- a/holidays/countries/germany.py
+++ b/holidays/countries/germany.py
@@ -95,6 +95,7 @@ class Germany(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
         "Thüringen": "TH",
     }
     _deprecated_subdivisions = ("BYP",)
+    start_year = 1990
 
     def __init__(self, *args, **kwargs) -> None:
         ChristianHolidays.__init__(self)
@@ -103,9 +104,6 @@ class Germany(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1989:
-            return None
-
         if self._year >= 1991:
             # New Year's Day.
             self._add_new_years_day(tr("Neujahr"))
@@ -142,9 +140,6 @@ class Germany(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
             self._populate_subdiv_by_public_holidays()
 
     def _populate_subdiv_bb_public_holidays(self):
-        if self._year <= 1989:
-            return None
-
         if self._year >= 1991:
             # Easter Sunday.
             self._add_easter_sunday(tr("Ostersonntag"))
@@ -156,17 +151,11 @@ class Germany(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
         self._add_holiday_oct_31(tr("Reformationstag"))
 
     def _populate_subdiv_be_public_holidays(self):
-        if self._year <= 1989:
-            return None
-
         if self._year >= 2019:
             # International Women's Day.
             self._add_womens_day(tr("Internationaler Frauentag"))
 
     def _populate_subdiv_bw_public_holidays(self):
-        if self._year <= 1989:
-            return None
-
         if self._year >= 1991:
             # Epiphany.
             self._add_epiphany_day(tr("Heilige Drei Könige"))
@@ -178,9 +167,6 @@ class Germany(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
         self._add_all_saints_day(tr("Allerheiligen"))
 
     def _populate_subdiv_by_public_holidays(self):
-        if self._year <= 1989:
-            return None
-
         if self._year >= 1991:
             self._add_epiphany_day(tr("Heilige Drei Könige"))
             self._add_corpus_christi_day(tr("Fronleichnam"))
@@ -188,78 +174,49 @@ class Germany(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
         self._add_all_saints_day(tr("Allerheiligen"))
 
     def _populate_subdiv_by_catholic_holidays(self):
-        if self._year <= 1990:
-            return None
-
-        # Assumption Day.
-        self._add_assumption_of_mary_day(tr("Mariä Himmelfahrt"))
+        if self._year >= 1991:
+            # Assumption Day.
+            self._add_assumption_of_mary_day(tr("Mariä Himmelfahrt"))
 
     def _populate_subdiv_hb_public_holidays(self):
-        if self._year <= 1989:
-            return None
-
         if self._year >= 2018:
             self._add_holiday_oct_31(tr("Reformationstag"))
 
     def _populate_subdiv_he_public_holidays(self):
-        if self._year <= 1989:
-            return None
-
         if self._year >= 1991:
             self._add_corpus_christi_day(tr("Fronleichnam"))
 
     def _populate_subdiv_hh_public_holidays(self):
-        if self._year <= 1989:
-            return None
-
         if self._year >= 2018:
             self._add_holiday_oct_31(tr("Reformationstag"))
 
     def _populate_subdiv_mv_public_holidays(self):
-        if self._year <= 1989:
-            return None
-
         if self._year >= 2023:
             self._add_womens_day(tr("Internationaler Frauentag"))
 
         self._add_holiday_oct_31(tr("Reformationstag"))
 
     def _populate_subdiv_ni_public_holidays(self):
-        if self._year <= 1989:
-            return None
-
         if self._year >= 2018:
             self._add_holiday_oct_31(tr("Reformationstag"))
 
     def _populate_subdiv_nw_public_holidays(self):
-        if self._year <= 1989:
-            return None
-
         if self._year >= 1991:
             self._add_corpus_christi_day(tr("Fronleichnam"))
 
         self._add_all_saints_day(tr("Allerheiligen"))
 
     def _populate_subdiv_rp_public_holidays(self):
-        if self._year <= 1989:
-            return None
-
         if self._year >= 1991:
             self._add_corpus_christi_day(tr("Fronleichnam"))
 
         self._add_all_saints_day(tr("Allerheiligen"))
 
     def _populate_subdiv_sh_public_holidays(self):
-        if self._year <= 1989:
-            return None
-
         if self._year >= 2018:
             self._add_holiday_oct_31(tr("Reformationstag"))
 
     def _populate_subdiv_sl_public_holidays(self):
-        if self._year <= 1989:
-            return None
-
         if self._year >= 1991:
             self._add_corpus_christi_day(tr("Fronleichnam"))
             self._add_assumption_of_mary_day(tr("Mariä Himmelfahrt"))
@@ -267,27 +224,18 @@ class Germany(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
         self._add_all_saints_day(tr("Allerheiligen"))
 
     def _populate_subdiv_sn_public_holidays(self):
-        if self._year <= 1989:
-            return None
-
         self._add_holiday_oct_31(tr("Reformationstag"))
 
         if self._year >= 1995:
             self._add_holiday_1st_wed_before_nov_22(tr("Buß- und Bettag"))
 
     def _populate_subdiv_st_public_holidays(self):
-        if self._year <= 1989:
-            return None
-
         if self._year >= 1991:
             self._add_epiphany_day(tr("Heilige Drei Könige"))
 
         self._add_holiday_oct_31(tr("Reformationstag"))
 
     def _populate_subdiv_th_public_holidays(self):
-        if self._year <= 1989:
-            return None
-
         if self._year >= 2019:
             # World Children's Day.
             self._add_holiday_sep_20(tr("Weltkindertag"))
diff --git a/holidays/countries/ghana.py b/holidays/countries/ghana.py
index 324ad587..ba02b420 100644
--- a/holidays/countries/ghana.py
+++ b/holidays/countries/ghana.py
@@ -28,6 +28,7 @@ class Ghana(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Islam
     estimated_label = "%s (estimated)"
     observed_label = "%s (observed)"
     observed_estimated_label = "%s (observed, estimated)"
+    start_year = 1957
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -37,10 +38,6 @@ class Ghana(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Islam
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Holidays observed since 1957
-        if self._year <= 1956:
-            return None
-
         # New Year's Day
         self._add_observed(self._add_new_years_day("New Year's Day"))
 
diff --git a/holidays/countries/guernsey.py b/holidays/countries/guernsey.py
index 5c5d2931..cdc16a5d 100644
--- a/holidays/countries/guernsey.py
+++ b/holidays/countries/guernsey.py
@@ -40,6 +40,8 @@ class Guernsey(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, St
 
     country = "GG"
     observed_label = "%s (substitute day)"
+    # Ordonnance relative aux Jours Fériés, 1909.
+    start_year = 1909
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -58,10 +60,6 @@ class Guernsey(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, St
         return super()._add_observed(dt, **kwargs)
 
     def _populate_public_holidays(self) -> None:
-        # Ordonnance relative aux Jours Fériés, 1909.
-        if self._year <= 1908:
-            return None
-
         # New Year's Day
         # Le jour de l'An
 
diff --git a/holidays/countries/haiti.py b/holidays/countries/haiti.py
index a4b5ad68..430d1567 100644
--- a/holidays/countries/haiti.py
+++ b/holidays/countries/haiti.py
@@ -29,6 +29,8 @@ class Haiti(HolidayBase, ChristianHolidays, InternationalHolidays):
     supported_categories = (OPTIONAL, PUBLIC)
     default_language = "fr_HT"
     supported_languages = ("en_US", "es", "fr_HT", "ht")
+    # 1987 Constitution.
+    start_year = 1987
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -36,10 +38,6 @@ class Haiti(HolidayBase, ChristianHolidays, InternationalHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # 1987 Constitution.
-        if self._year <= 1986:
-            return None
-
         # ARTICLE 275.1 : National Holidays.
         # Both Battle of Vertieres Day and Armed Forces Day are on Nov 18, declared discretely.
 
@@ -100,10 +98,6 @@ class Haiti(HolidayBase, ChristianHolidays, InternationalHolidays):
         self._add_christmas_day(tr("Noël"))
 
     def _populate_optional_holidays(self):
-        # 1987 Constitution.
-        if self._year <= 1986:
-            return None
-
         # Ash Wednesday.
         self._add_ash_wednesday(tr("Mercredi des Cendres"))
 
diff --git a/holidays/countries/hongkong.py b/holidays/countries/hongkong.py
index 8d02f8c9..e1bbed80 100644
--- a/holidays/countries/hongkong.py
+++ b/holidays/countries/hongkong.py
@@ -68,6 +68,8 @@ class HongKong(
     observed_label = "%s (observed)"
     supported_categories = (OPTIONAL, PUBLIC)
     weekend = {SUN}
+    # Current set of holidays actually valid since 1946
+    start_year = 1946
 
     def __init__(self, *args, **kwargs):
         ChineseCalendarHolidays.__init__(self)
@@ -238,9 +240,6 @@ class HongKong(
             self._add_observed(self._add_christmas_day("Christmas Day"))
 
     def _populate_optional_holidays(self):
-        if self._year <= 1945:
-            return None
-
         # General Holidays.
 
         # The first day of January.
diff --git a/holidays/countries/indonesia.py b/holidays/countries/indonesia.py
index 18c01c5e..8c7e3ff2 100644
--- a/holidays/countries/indonesia.py
+++ b/holidays/countries/indonesia.py
@@ -60,6 +60,7 @@ class Indonesia(
     observed_estimated_label = tr("Pegangti %s (perkiraan)")
     supported_languages = ("en_US", "id", "th", "uk")
     supported_categories = (GOVERNMENT, PUBLIC)
+    start_year = 1946
 
     def __init__(self, *args, **kwargs):
         BuddhistCalendarHolidays.__init__(self, cls=IndonesiaBuddhistHolidays, show_estimated=True)
@@ -71,9 +72,6 @@ class Indonesia(
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1945:
-            return None
-
         # New Year's Day.
         self._add_new_years_day(tr("Tahun Baru Masehi"))
 
diff --git a/holidays/countries/iran.py b/holidays/countries/iran.py
index d49d593a..db7595e3 100644
--- a/holidays/countries/iran.py
+++ b/holidays/countries/iran.py
@@ -28,6 +28,7 @@ class Iran(HolidayBase, IslamicHolidays, PersianCalendarHolidays):
     # %s (estimated).
     estimated_label = tr("(تخمین زده) %s")
     supported_languages = ("en_US", "fa")
+    start_year = 1980
 
     def __init__(self, *args, **kwargs):
         IslamicHolidays.__init__(self)
@@ -35,9 +36,6 @@ class Iran(HolidayBase, IslamicHolidays, PersianCalendarHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1979:
-            return None
-
         # Persian New Year.
         name = tr("نوروز")
         self._add_nowruz_day(name)
diff --git a/holidays/countries/ireland.py b/holidays/countries/ireland.py
index 71c3235f..036a8814 100644
--- a/holidays/countries/ireland.py
+++ b/holidays/countries/ireland.py
@@ -23,6 +23,7 @@ class Ireland(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
     """
 
     country = "IE"
+    start_year = 1872
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -31,9 +32,6 @@ class Ireland(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1871:
-            return None
-
         # New Year's Day.
         if self._year >= 1975:
             self._add_new_years_day("New Year's Day")
diff --git a/holidays/countries/israel.py b/holidays/countries/israel.py
index c4f3f950..8fe08f6a 100644
--- a/holidays/countries/israel.py
+++ b/holidays/countries/israel.py
@@ -54,6 +54,7 @@ class Israel(ObservedHolidayBase):
     supported_categories = (OPTIONAL, PUBLIC, SCHOOL)
     supported_languages = ("en_US", "he", "uk")
     weekend = {FRI, SAT}
+    start_year = 1948
 
     def __init__(self, *args, **kwargs):
         kwargs.setdefault("observed_rule", FRI_TO_PREV_THU + SAT_TO_PREV_THU)
@@ -63,12 +64,6 @@ class Israel(ObservedHolidayBase):
         return _HebrewLunisolar._get_holiday(holiday, self._year)
 
     def _populate_public_holidays(self):
-        if self._year <= 1947:
-            return None
-
-        if self._year >= 2101:
-            raise NotImplementedError
-
         # Rosh Hashanah (New Year).
         name = tr("ראש השנה")
         rosh_hashanah_dt = self._get_holiday(ROSH_HASHANAH)
@@ -105,12 +100,6 @@ class Israel(ObservedHolidayBase):
         self._add_holiday(tr("שבועות"), self._get_holiday(SHAVUOT))
 
     def _populate_optional_holidays(self):
-        if self._year <= 1947:
-            return None
-
-        if self._year >= 2101:
-            raise NotImplementedError
-
         sukkot_dt = self._get_holiday(SUKKOT)
         for offset in range(1, 6):
             # Chol HaMoed Sukkot (Feast of Tabernacles holiday).
@@ -151,12 +140,6 @@ class Israel(ObservedHolidayBase):
             self._add_holiday(name, tisha_bav_dt)
 
     def _populate_school_holidays(self):
-        if self._year <= 1947:
-            return None
-
-        if self._year >= 2101:
-            raise NotImplementedError
-
         sukkot_dt = self._get_holiday(SUKKOT)
         for offset in range(1, 6):
             # Chol HaMoed Sukkot (Feast of Tabernacles holiday).
diff --git a/holidays/countries/japan.py b/holidays/countries/japan.py
index 1de0ca1a..a4462572 100644
--- a/holidays/countries/japan.py
+++ b/holidays/countries/japan.py
@@ -43,6 +43,8 @@ class Japan(ObservedHolidayBase, InternationalHolidays, StaticHolidays):
     default_language = "ja"
     supported_categories = (BANK, PUBLIC)
     supported_languages = ("en_US", "ja", "th")
+    start_year = 1949
+    end_year = 2099
 
     def __init__(self, *args, **kwargs) -> None:
         InternationalHolidays.__init__(self)
@@ -80,9 +82,6 @@ class Japan(ObservedHolidayBase, InternationalHolidays, StaticHolidays):
                     break
 
     def _populate_public_holidays(self):
-        if self._year < 1949 or self._year > 2099:
-            raise NotImplementedError
-
         dts_observed = set()
 
         # New Year's Day.
@@ -199,9 +198,6 @@ class Japan(ObservedHolidayBase, InternationalHolidays, StaticHolidays):
             self._populate_observed(dts_observed)
 
     def _populate_bank_holidays(self):
-        if self._year < 1949 or self._year > 2099:
-            raise NotImplementedError
-
         # Bank Holiday.
         name = tr("銀行休業日")
         self._add_new_years_day(name)
diff --git a/holidays/countries/jersey.py b/holidays/countries/jersey.py
index e2e89590..12557ec4 100644
--- a/holidays/countries/jersey.py
+++ b/holidays/countries/jersey.py
@@ -48,6 +48,8 @@ class Jersey(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
 
     country = "JE"
     observed_label = "%s (substitute day)"
+    # Earliest available piece of law available is from 1952.
+    start_year = 1952
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -65,10 +67,6 @@ class Jersey(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
         return super()._add_observed(dt, **kwargs)
 
     def _populate_public_holidays(self) -> None:
-        # Earliest available piece of law available is from 1952.
-        if self._year <= 1951:
-            return None
-
         # New Year's Day.
         # Available online source shown that this was celebrated since at least 1952.
         # Was briefly removed in 1983 only to be added back again before that came to effect.
diff --git a/holidays/countries/kazakhstan.py b/holidays/countries/kazakhstan.py
index 836146cb..f477123f 100644
--- a/holidays/countries/kazakhstan.py
+++ b/holidays/countries/kazakhstan.py
@@ -85,6 +85,8 @@ class Kazakhstan(
     # %s (observed, estimated).
     observed_estimated_label = tr("%s (қайта белгіленген демалыс, бағаланған)")
     supported_languages = ("en_US", "kk", "uk")
+    # Kazakhstan declared its sovereignty on 25 October 1990.
+    start_year = 1991
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self, JULIAN_CALENDAR)
@@ -96,10 +98,6 @@ class Kazakhstan(
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Kazakhstan declared its sovereignty on 25 October 1990
-        if self._year <= 1990:
-            return None
-
         dts_observed = set()
 
         # New Year's Day.
diff --git a/holidays/countries/kenya.py b/holidays/countries/kenya.py
index beafaa48..972d1350 100644
--- a/holidays/countries/kenya.py
+++ b/holidays/countries/kenya.py
@@ -24,6 +24,7 @@ class Kenya(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stati
 
     country = "KE"
     observed_label = "%s (observed)"
+    start_year = 1963
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -33,9 +34,6 @@ class Kenya(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stati
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1962:
-            return None
-
         # New Year's Day
         self._add_observed(self._add_new_years_day("New Year's Day"))
 
diff --git a/holidays/countries/laos.py b/holidays/countries/laos.py
index 99efb499..87cad68a 100644
--- a/holidays/countries/laos.py
+++ b/holidays/countries/laos.py
@@ -66,6 +66,8 @@ class Laos(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiCalen
     # %s (in lieu).
     observed_label = tr("ພັກຊົດເຊີຍ%s")
     supported_languages = ("en_US", "lo", "th")
+    # Available post-Lao PDR proclamation on Dec 2, 1975.
+    start_year = 1976
 
     def __init__(self, *args, **kwargs):
         InternationalHolidays.__init__(self)
@@ -77,9 +79,6 @@ class Laos(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiCalen
 
     def _populate_bank_holidays(self):
         # Based on both LSX and BCEL calendar.
-        # Available post-Lao PDR proclamation on Dec 2, 1975.
-        if self._year <= 1975:
-            return None
 
         # ວັນສ້າງຕັ້ງທະນາຄານແຫ່ງ ສປປ ລາວ
         # Status: In-Use.
@@ -109,10 +108,6 @@ class Laos(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiCalen
         self._add_holiday(name, self._get_next_workday(second_to_last_workday, -1))
 
     def _populate_public_holidays(self):
-        # Available post-Lao PDR proclamation on Dec 2, 1975.
-        if self._year <= 1975:
-            return None
-
         # ວັນປີໃໝ່ສາກົນ
         # Status: In-Use.
 
@@ -178,8 +173,6 @@ class Laos(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiCalen
         # As such, no in lieu observance are in place for these holidays.
 
         # Laotian Lunar Calendar Holidays only work from 1941 to 2157.
-        if self._year <= 1975:
-            return None
 
         # ວັນບຸນມາຂະບູຊາ
         # Status: In-Use.
@@ -253,10 +246,6 @@ class Laos(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiCalen
     def _populate_workday_holidays(self):
         # No Public Holidays are issued, though still observed by the government.
 
-        # Available post-Lao PDR proclamation on Dec 2, 1975.
-        if self._year <= 1975:
-            return None
-
         # ວັນສ້າງຕັ້ງກອງທັບປະຊາຊົນລາວ
         # Status: In-Use.
         # Celebrated the creation of the independent Lao army on Jan 20, 1949.
diff --git a/holidays/countries/latvia.py b/holidays/countries/latvia.py
index 356b5a4e..7eb7a1aa 100644
--- a/holidays/countries/latvia.py
+++ b/holidays/countries/latvia.py
@@ -29,6 +29,7 @@ class Latvia(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
     # %s (observed).
     observed_label = tr("%s (brīvdiena)")
     supported_languages = ("en_US", "lv", "uk")
+    start_year = 1990
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -38,9 +39,6 @@ class Latvia(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1989:
-            return None
-
         # New Year's Day.
         self._add_new_years_day(tr("Jaunais Gads"))
 
diff --git a/holidays/countries/lesotho.py b/holidays/countries/lesotho.py
index 80d37487..f2ee8e23 100644
--- a/holidays/countries/lesotho.py
+++ b/holidays/countries/lesotho.py
@@ -24,6 +24,7 @@ class Lesotho(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
     """
 
     country = "LS"
+    start_year = 1996
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -32,9 +33,6 @@ class Lesotho(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1995:
-            return None
-
         # New Year's Day.
         self._add_new_years_day("New Year's Day")
 
diff --git a/holidays/countries/lithuania.py b/holidays/countries/lithuania.py
index 22ad8e43..05e34610 100644
--- a/holidays/countries/lithuania.py
+++ b/holidays/countries/lithuania.py
@@ -28,6 +28,7 @@ class Lithuania(HolidayBase, ChristianHolidays, InternationalHolidays):
     country = "LT"
     default_language = "lt"
     supported_languages = ("en_US", "lt", "uk")
+    start_year = 1990
 
     def __init__(self, *args, **kwargs) -> None:
         ChristianHolidays.__init__(self)
@@ -35,9 +36,6 @@ class Lithuania(HolidayBase, ChristianHolidays, InternationalHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self) -> None:
-        if self._year <= 1989:
-            return None
-
         # New Year's Day.
         self._add_new_years_day(tr("Naujųjų metų diena"))
 
diff --git a/holidays/countries/madagascar.py b/holidays/countries/madagascar.py
index abba740d..4ceed943 100644
--- a/holidays/countries/madagascar.py
+++ b/holidays/countries/madagascar.py
@@ -27,6 +27,7 @@ class Madagascar(HolidayBase, ChristianHolidays, InternationalHolidays):
     country = "MG"
     default_language = "mg"
     supported_languages = ("en_US", "mg", "uk")
+    start_year = 1947
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -34,10 +35,6 @@ class Madagascar(HolidayBase, ChristianHolidays, InternationalHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Observed since 1947
-        if self._year <= 1946:
-            return None
-
         # New Year's Day.
         self._add_new_years_day(tr("Taom-baovao"))
 
diff --git a/holidays/countries/malawi.py b/holidays/countries/malawi.py
index 45c214f2..48d6680f 100644
--- a/holidays/countries/malawi.py
+++ b/holidays/countries/malawi.py
@@ -26,6 +26,7 @@ class Malawi(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
 
     country = "MW"
     observed_label = "%s (observed)"
+    start_year = 2000
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -34,10 +35,6 @@ class Malawi(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Observed since 2000
-        if self._year <= 1999:
-            return None
-
         self._add_observed(self._add_new_years_day("New Year's Day"))
 
         self._add_observed(self._add_holiday_jan_15("John Chilembwe Day"))
diff --git a/holidays/countries/malaysia.py b/holidays/countries/malaysia.py
index 5d1eb7ef..fc68cf88 100644
--- a/holidays/countries/malaysia.py
+++ b/holidays/countries/malaysia.py
@@ -123,6 +123,7 @@ class Malaysia(
         "PJY": "16",
     }
     supported_languages = ("en_US", "ms_MY", "th")
+    start_year = 1952
 
     def __init__(self, *args, **kwargs):
         """
@@ -152,9 +153,6 @@ class Malaysia(
         self.dts_observed = set()
 
     def _populate_public_holidays(self):
-        if self._year <= 1951:
-            return None
-
         # This must be done for every `_populate_public_holidays()` call.
         # Otherwise, 2006/2007 Eid al-Adha observance would be miscalculated.
         self.dts_observed = set()
@@ -212,9 +210,6 @@ class Malaysia(
         self.dts_observed.update(self._add_eid_al_adha_day(tr("Hari Raya Qurban")))
 
     def _populate_subdiv_holidays(self):
-        if self._year <= 1951:
-            return None
-
         if self.subdiv and self.subdiv not in {"13", "15"}:
             # Deepavali.
             self.dts_observed.add(self._add_diwali(tr("Hari Deepavali")))
diff --git a/holidays/countries/malta.py b/holidays/countries/malta.py
index fa2875af..39abf5d8 100644
--- a/holidays/countries/malta.py
+++ b/holidays/countries/malta.py
@@ -40,6 +40,8 @@ class Malta(HolidayBase, ChristianHolidays, InternationalHolidays):
     country = "MT"
     default_language = "mt"
     supported_languages = ("en_US", "mt")
+    # Earliest available source is 1980.
+    start_year = 1980
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -47,10 +49,6 @@ class Malta(HolidayBase, ChristianHolidays, InternationalHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Earliest available source is 1980
-        if self._year <= 1979:
-            return None
-
         # L-Ewwel tas-Sena
         # Status: In-Use.
 
diff --git a/holidays/countries/moldova.py b/holidays/countries/moldova.py
index 0946ac4c..043a610b 100644
--- a/holidays/countries/moldova.py
+++ b/holidays/countries/moldova.py
@@ -27,6 +27,7 @@ class Moldova(HolidayBase, ChristianHolidays, InternationalHolidays):
     country = "MD"
     default_language = "ro"
     supported_languages = ("en_US", "ro", "uk")
+    start_year = 1991
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self, JULIAN_CALENDAR)
@@ -34,9 +35,6 @@ class Moldova(HolidayBase, ChristianHolidays, InternationalHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1990:
-            return None
-
         # New Year's Day.
         self._add_new_years_day(tr("Anul Nou"))
 
diff --git a/holidays/countries/mozambique.py b/holidays/countries/mozambique.py
index a69f833f..98008af1 100644
--- a/holidays/countries/mozambique.py
+++ b/holidays/countries/mozambique.py
@@ -22,6 +22,7 @@ class Mozambique(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
     # %s (observed).
     observed_label = tr("%s (ponte)")
     supported_languages = ("en_US", "pt_MZ", "uk")
+    start_year = 1975
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -30,9 +31,6 @@ class Mozambique(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1974:
-            return None
-
         # International Fraternalism Day.
         self._add_observed(self._add_new_years_day(tr("Dia da Fraternidade universal")))
 
diff --git a/holidays/countries/namibia.py b/holidays/countries/namibia.py
index 6e88cf80..a1683092 100644
--- a/holidays/countries/namibia.py
+++ b/holidays/countries/namibia.py
@@ -30,6 +30,7 @@ class Namibia(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Sta
     country = "NA"
     # %s (observed).
     observed_label = "%s (observed)"
+    start_year = 1990
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -40,9 +41,6 @@ class Namibia(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Sta
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1989:
-            return None
-
         # New Year's Day.
         self._add_observed(self._add_new_years_day("New Year's Day"))
 
diff --git a/holidays/countries/netherlands.py b/holidays/countries/netherlands.py
index ad655914..a3740432 100644
--- a/holidays/countries/netherlands.py
+++ b/holidays/countries/netherlands.py
@@ -32,6 +32,7 @@ class Netherlands(HolidayBase, ChristianHolidays, InternationalHolidays):
     default_language = "nl"
     supported_categories = (OPTIONAL, PUBLIC)
     supported_languages = ("en_US", "nl", "uk")
+    start_year = 1801
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
diff --git a/holidays/countries/new_zealand.py b/holidays/countries/new_zealand.py
index 9f42f3ae..fa67210a 100644
--- a/holidays/countries/new_zealand.py
+++ b/holidays/countries/new_zealand.py
@@ -112,6 +112,7 @@ class NewZealand(ObservedHolidayBase, ChristianHolidays, InternationalHolidays,
         "STC",  # For 'South Canterbury' Subregional Holidays.
         "WTL",  # Westland, Correct code is WTC (for West Coast).
     )
+    start_year = 1894
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -137,9 +138,6 @@ class NewZealand(ObservedHolidayBase, ChristianHolidays, InternationalHolidays,
         # Sovereign's Birthday Observance Act 1937, 1952
         # Holidays Act 1981, 2003
 
-        if self._year <= 1893:
-            return None
-
         # New Year's Day
         self._add_observed(self._add_new_years_day("New Year's Day"), rule=SAT_SUN_TO_NEXT_MON_TUE)
         self._add_observed(
diff --git a/holidays/countries/nigeria.py b/holidays/countries/nigeria.py
index 2fdad49b..119cef1f 100644
--- a/holidays/countries/nigeria.py
+++ b/holidays/countries/nigeria.py
@@ -29,6 +29,7 @@ class Nigeria(
 
     country = "NG"
     observed_label = "%s (observed)"
+    start_year = 1979
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -40,9 +41,6 @@ class Nigeria(
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1978:
-            return None
-
         dts_observed = set()
 
         # New Year's Day.
diff --git a/holidays/countries/pakistan.py b/holidays/countries/pakistan.py
index dcb3b1a9..265de6cd 100644
--- a/holidays/countries/pakistan.py
+++ b/holidays/countries/pakistan.py
@@ -18,6 +18,7 @@ from holidays.holiday_base import HolidayBase
 
 class Pakistan(HolidayBase, InternationalHolidays, IslamicHolidays):
     country = "PK"
+    start_year = 1948
 
     def __init__(self, *args, **kwargs):
         InternationalHolidays.__init__(self)
@@ -25,9 +26,6 @@ class Pakistan(HolidayBase, InternationalHolidays, IslamicHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1947:
-            return None
-
         # Kashmir Solidarity Day.
         if self._year >= 1990:
             self._add_holiday_feb_5("Kashmir Solidarity Day")
diff --git a/holidays/countries/palau.py b/holidays/countries/palau.py
index d7f3c769..1062e176 100644
--- a/holidays/countries/palau.py
+++ b/holidays/countries/palau.py
@@ -37,6 +37,11 @@ class Palau(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
     country = "PW"
     supported_categories = (ARMED_FORCES, HALF_DAY, PUBLIC)
     observed_label = "%s (observed)"
+    # Republic of Palau Public Law No. 2-15.
+    # The legislation was first adopted by the 2nd Olbiil Era Kelulau (1984-1988),
+    # but since we cannot find any info on its actual adoption date, we may as
+    # well use the formation date of the country as the placeholder cut-off date.
+    start_year = 1981
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -46,13 +51,6 @@ class Palau(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Republic of Palau Public Law No. 2-15.
-        # The legislation was first adopted by the 2nd Olbiil Era Kelulau (1984-1988),
-        # but since we cannot find any info on its actual adoption date, we may as
-        # well use the formation date of the country as the placeholder cut-off date.
-        if self._year <= 1980:
-            return None
-
         # Fixed Date Public Holidays.
 
         # New Year's Day.
diff --git a/holidays/countries/papua_new_guinea.py b/holidays/countries/papua_new_guinea.py
index dd7a2e38..fe204805 100644
--- a/holidays/countries/papua_new_guinea.py
+++ b/holidays/countries/papua_new_guinea.py
@@ -42,6 +42,8 @@ class PapuaNewGuinea(
 
     country = "PG"
     observed_label = "%s (observed)"
+    # Public Holidays Law 1953 (No. 38 of 1953).
+    start_year = 1953
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -51,10 +53,6 @@ class PapuaNewGuinea(
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Public Holidays Law 1953 (No. 38 of 1953).
-        if self._year <= 1952:
-            return None
-
         # Section 1: Public Holidays.
         # - Easter Saturday is currently not gazetted as a Public Holiday in 2024.
         # - While Easter Sunday itself is not listed, this is de facto always a day-off.
diff --git a/holidays/countries/paraguay.py b/holidays/countries/paraguay.py
index 887a3f95..4b8ec5a8 100644
--- a/holidays/countries/paraguay.py
+++ b/holidays/countries/paraguay.py
@@ -34,6 +34,8 @@ class Paraguay(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHoli
     default_language = "es"
     supported_categories = (GOVERNMENT, PUBLIC)
     supported_languages = ("en_US", "es", "uk")
+    # Ley 8/1990.
+    start_year = 1991
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -42,10 +44,6 @@ class Paraguay(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHoli
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Ley 8/1990.
-        if self._year <= 1990:
-            return None
-
         # New Year's Day.
         self._add_new_years_day(tr("Año Nuevo"))
 
diff --git a/holidays/countries/philippines.py b/holidays/countries/philippines.py
index 769fc9e3..f396eaa0 100644
--- a/holidays/countries/philippines.py
+++ b/holidays/countries/philippines.py
@@ -58,6 +58,7 @@ class Philippines(
     # %s (estimated).
     estimated_label = tr("%s (estimated)")
     supported_languages = ("en_PH", "en_US", "fil", "th")
+    start_year = 1988
 
     def __init__(self, *args, **kwargs):
         ChineseCalendarHolidays.__init__(self, cls=PhilippinesChineseHolidays)
@@ -68,9 +69,6 @@ class Philippines(
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1987:
-            return None
-
         # New Year's Day.
         self._add_new_years_day(tr("New Year's Day"))
 
diff --git a/holidays/countries/poland.py b/holidays/countries/poland.py
index c293d8ff..f6179ee8 100644
--- a/holidays/countries/poland.py
+++ b/holidays/countries/poland.py
@@ -25,6 +25,7 @@ class Poland(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolida
     country = "PL"
     default_language = "pl"
     supported_languages = ("en_US", "pl", "uk")
+    start_year = 1925
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -33,9 +34,6 @@ class Poland(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolida
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1924:
-            return None
-
         # New Year's Day.
         self._add_new_years_day(tr("Nowy Rok"))
 
diff --git a/holidays/countries/portugal.py b/holidays/countries/portugal.py
index 057be7f4..96505738 100644
--- a/holidays/countries/portugal.py
+++ b/holidays/countries/portugal.py
@@ -39,6 +39,7 @@ class Portugal(HolidayBase, ChristianHolidays, InternationalHolidays):
     country = "PT"
     default_language = "pt_PT"
     supported_categories = (OPTIONAL, PUBLIC)
+    start_year = 1801
 
     # https://en.wikipedia.org/wiki/ISO_3166-2:PT
     subdivisions = (
diff --git a/holidays/countries/russia.py b/holidays/countries/russia.py
index c2c8aff6..957eb54d 100644
--- a/holidays/countries/russia.py
+++ b/holidays/countries/russia.py
@@ -27,6 +27,7 @@ class Russia(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
     country = "RU"
     default_language = "ru"
     supported_languages = ("en_US", "ru")
+    start_year = 1991
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self, JULIAN_CALENDAR)
@@ -35,9 +36,6 @@ class Russia(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1990:
-            return None
-
         if self._year <= 2004:
             # New Year's Day.
             name = tr("Новый год")
diff --git a/holidays/countries/saint_kitts_and_nevis.py b/holidays/countries/saint_kitts_and_nevis.py
index 990d76a0..6a0b7839 100644
--- a/holidays/countries/saint_kitts_and_nevis.py
+++ b/holidays/countries/saint_kitts_and_nevis.py
@@ -47,6 +47,8 @@ class SaintKittsAndNevis(
     # %s (observed).
     observed_label = "%s (observed)"
     weekend = {SUN}
+    # Public Holidays Act, Act 7 of 1983 Amendment.
+    start_year = 1983
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -56,10 +58,6 @@ class SaintKittsAndNevis(
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Public Holidays Act, Act 7 of 1983 Amendment.
-        if self._year <= 1982:
-            return None
-
         # Carnival Day.
         self._add_observed(self._add_new_years_day("Carnival Day"), rule=SUN_TO_NEXT_TUE)
 
diff --git a/holidays/countries/seychelles.py b/holidays/countries/seychelles.py
index 5cb3a47f..0c304980 100644
--- a/holidays/countries/seychelles.py
+++ b/holidays/countries/seychelles.py
@@ -41,6 +41,8 @@ class Seychelles(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
     # %s (observed).
     observed_label = tr("%s (observed)")
     supported_languages = ("en_SC", "en_US")
+    # Earliest source is the 1994 amendment of Seychelles Public Holidays Act.
+    start_year = 1994
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -50,10 +52,6 @@ class Seychelles(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Earliest source is the 1994 amendment of Seychelles Public Holidays Act.
-        if self._year <= 1993:
-            return None
-
         # New Year's Day.
         self._add_new_years_day(tr("New Year's Day"))
 
diff --git a/holidays/countries/slovakia.py b/holidays/countries/slovakia.py
index 726e72df..5ba3152d 100644
--- a/holidays/countries/slovakia.py
+++ b/holidays/countries/slovakia.py
@@ -29,6 +29,8 @@ class Slovakia(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHoli
     default_language = "sk"
     supported_categories = (PUBLIC, WORKDAY)
     supported_languages = ("en_US", "sk", "uk")
+    # Independent Slovak Republic established on Jan 01, 1993
+    start_year = 1993
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -37,10 +39,6 @@ class Slovakia(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHoli
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Independent Slovak Republic established on Jan 01, 1993
-        if self._year <= 1992:
-            return None
-
         # Day of the Establishment of the Slovak Republic.
         self._add_holiday_jan_1(tr("Deň vzniku Slovenskej republiky"))
 
diff --git a/holidays/countries/slovenia.py b/holidays/countries/slovenia.py
index 0fce3f34..ed5ea24f 100644
--- a/holidays/countries/slovenia.py
+++ b/holidays/countries/slovenia.py
@@ -31,6 +31,7 @@ class Slovenia(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHoli
     country = "SI"
     default_language = "sl"
     supported_languages = ("en_US", "sl", "uk")
+    start_year = 1991
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -39,9 +40,6 @@ class Slovenia(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHoli
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1990:
-            return None
-
         # New Year's Day.
         name = tr("novo leto")
         self._add_new_years_day(name)
diff --git a/holidays/countries/south_africa.py b/holidays/countries/south_africa.py
index 73cc85b6..57ae0608 100644
--- a/holidays/countries/south_africa.py
+++ b/holidays/countries/south_africa.py
@@ -25,6 +25,8 @@ class SouthAfrica(ObservedHolidayBase, ChristianHolidays, InternationalHolidays,
 
     country = "ZA"
     observed_label = "%s (observed)"
+    # Observed since 1910, with a few name changes
+    start_year = 1910
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -35,10 +37,6 @@ class SouthAfrica(ObservedHolidayBase, ChristianHolidays, InternationalHolidays,
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Observed since 1910, with a few name changes
-        if self._year <= 1909:
-            return None
-
         self._add_observed(self._add_new_years_day("New Year's Day"))
 
         self._add_good_friday("Good Friday")
diff --git a/holidays/countries/south_korea.py b/holidays/countries/south_korea.py
index 8e1441da..2bf16dd8 100644
--- a/holidays/countries/south_korea.py
+++ b/holidays/countries/south_korea.py
@@ -92,6 +92,7 @@ class SouthKorea(
     # Alternative holiday for %s.
     observed_label = tr("%s 대체 휴일")
     supported_languages = ("en_US", "ko", "th")
+    start_year = 1948
 
     def __init__(self, *args, **kwargs):
         ChineseCalendarHolidays.__init__(self, cls=SouthKoreaLunisolarHolidays)
@@ -134,9 +135,6 @@ class SouthKorea(
             ):
                 three_days_holidays[dt_alt] = name
 
-        if self._year <= 1947:
-            return None
-
         dts_observed = set()
         three_days_holidays = {}
 
@@ -281,9 +279,6 @@ class SouthKorea(
             self._populate_observed(dts_observed, three_days_holidays)
 
     def _populate_bank_holidays(self):
-        if self._year <= 1947:
-            return None
-
         # Workers' Day.
         name = tr("근로자의날")
         if self._year >= 1994:
diff --git a/holidays/countries/switzerland.py b/holidays/countries/switzerland.py
index 6aa8d020..11bc9e06 100644
--- a/holidays/countries/switzerland.py
+++ b/holidays/countries/switzerland.py
@@ -58,6 +58,7 @@ class Switzerland(ObservedHolidayBase, ChristianHolidays, InternationalHolidays)
     )
     supported_categories = (HALF_DAY, OPTIONAL, PUBLIC)
     supported_languages = ("de", "en_US", "fr", "it", "uk")
+    start_year = 1801
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
diff --git a/holidays/countries/taiwan.py b/holidays/countries/taiwan.py
index e1203ff4..591e0146 100644
--- a/holidays/countries/taiwan.py
+++ b/holidays/countries/taiwan.py
@@ -70,6 +70,7 @@ class Taiwan(ObservedHolidayBase, ChineseCalendarHolidays, InternationalHolidays
     observed_label = tr("%s（慶祝）")
     default_language = "zh_TW"
     supported_languages = ("en_US", "th", "zh_CN", "zh_TW")
+    start_year = 1912
 
     def __init__(self, *args, **kwargs):
         ChineseCalendarHolidays.__init__(self)
@@ -96,9 +97,6 @@ class Taiwan(ObservedHolidayBase, ChineseCalendarHolidays, InternationalHolidays
                 )
 
     def _populate_public_holidays(self):
-        if self._year <= 1911:
-            return None
-
         dts_observed = set()
         dts_observed_forward = set()
 
diff --git a/holidays/countries/tanzania.py b/holidays/countries/tanzania.py
index 2b49062a..637e367e 100644
--- a/holidays/countries/tanzania.py
+++ b/holidays/countries/tanzania.py
@@ -64,6 +64,8 @@ class Tanzania(
     # %s (estimated).
     estimated_label = tr("%s (makisio)")
     supported_languages = ("en_US", "sw")
+    # Written Law (Miscellaneous Amendments) (No. 2) Act, 1994.
+    start_year = 1994
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -73,10 +75,6 @@ class Tanzania(
         super().__init__(*args, **kwargs)
 
     def _populate_bank_holidays(self):
-        # Written Law (Miscellaneous Amendments) (No. 2) Act, 1994.
-        if self._year <= 1993:
-            return None
-
         # Sikukuu ya Pasaka.
         # Status: In-Use.
         # Only observed by financial institutions.
@@ -85,10 +83,6 @@ class Tanzania(
         self._add_easter_sunday(tr("Sikukuu ya Pasaka"))
 
     def _populate_public_holidays(self):
-        # Written Law (Miscellaneous Amendments) (No. 2) Act, 1994.
-        if self._year <= 1993:
-            return None
-
         # In-lieus ("Badala ya %s") are observed on Monday should it fall on the weekends.
         # Abrogated in Public Holidays Ordinance  No. 28 of 1966.
         # Reinstituted in Written Law (Miscellaneous Amendments) (No. 2) Act, 1994.
diff --git a/holidays/countries/thailand.py b/holidays/countries/thailand.py
index e3f58f5b..01897cdf 100644
--- a/holidays/countries/thailand.py
+++ b/holidays/countries/thailand.py
@@ -143,6 +143,9 @@ class Thailand(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiC
     # %s (in lieu).
     observed_label = tr("ชดเชย%s")
     supported_languages = ("en_US", "th")
+    # Due to Thai Calendar Migration, this is capped off at 1941.
+    # But certain holidays were implemented before 1941.
+    start_year = 1941
 
     def __init__(self, *args, **kwargs):
         InternationalHolidays.__init__(self)
@@ -155,11 +158,6 @@ class Thailand(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiC
         return 1961 <= self._year <= 1973 or 1995 <= self._year <= 1997 or self._year >= 2001
 
     def _populate_public_holidays(self):
-        # Due to Thai Calendar Migration, this is capped off at 1941.
-        # But certain holidays were implemented before 1941.
-        if self._year <= 1940:
-            return None
-
         # Fixed Date Holidays
 
         # วันขึ้นปีใหม่
@@ -682,10 +680,10 @@ class Thailand(ObservedHolidayBase, InternationalHolidays, StaticHolidays, ThaiC
 
         # วันลอยกระทง
         # Status: In-Use.
+        # Started in 1941.
 
-        if self._year >= 1941:
-            # Loy Krathong
-            self._add_loy_krathong(tr("วันลอยกระทง"))
+        # Loy Krathong
+        self._add_loy_krathong(tr("วันลอยกระทง"))
 
 
 class TH(Thailand):
diff --git a/holidays/countries/timor_leste.py b/holidays/countries/timor_leste.py
index 6aef1231..3c68897f 100644
--- a/holidays/countries/timor_leste.py
+++ b/holidays/countries/timor_leste.py
@@ -48,6 +48,8 @@ class TimorLeste(
     # %s (estimated).
     estimated_label = tr("%s (aproximada)")
     supported_languages = ("en_US", "pt_TL", "tet")
+    # Law No. 10/2005 Of 10 August, Public Holidays and Official Commemorative Dates.
+    start_year = 2006
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -57,10 +59,6 @@ class TimorLeste(
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Law No. 10/2005 Of 10 August, Public Holidays and Official Commemorative Dates.
-        if self._year <= 2005:
-            return None
-
         # Fixed Date Public Holidays.
 
         # New Year's Day.
@@ -141,10 +139,6 @@ class TimorLeste(
         self._add_eid_al_adha_day(tr("Idul Adha"))
 
     def _populate_workday_holidays(self):
-        # Law No. 10/2005 Of 10 August, Public Holidays and Official Commemorative Dates.
-        if self._year <= 2005:
-            return None
-
         # Fixed Date Government Holidays.
 
         # World Children's Day.
diff --git a/holidays/countries/tonga.py b/holidays/countries/tonga.py
index 8ea32c15..04aea30d 100644
--- a/holidays/countries/tonga.py
+++ b/holidays/countries/tonga.py
@@ -75,6 +75,8 @@ class Tonga(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stati
     # %s (observed).
     observed_label = tr("%s (fakatokanga'i)")
     supported_languages = ("en_US", "to")
+    # Public Holidays Act, 1988 Revision.
+    start_year = 1989
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -89,10 +91,6 @@ class Tonga(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stati
         return super()._add_observed(dt, **kwargs)
 
     def _populate_public_holidays(self):
-        # Public Holidays Act, 1988 Revision.
-        if self._year <= 1988:
-            return None
-
         # New Year's Day.
         jan_1 = self._add_new_years_day(tr("'Uluaki 'Aho 'o e Ta'u Fo'ou"))
         if self._year <= 2016:
diff --git a/holidays/countries/turkey.py b/holidays/countries/turkey.py
index 9a564582..b409b79c 100644
--- a/holidays/countries/turkey.py
+++ b/holidays/countries/turkey.py
@@ -35,6 +35,8 @@ class Turkey(HolidayBase, InternationalHolidays, IslamicHolidays, StaticHolidays
     estimated_label = tr("%s (tahmini)")
     supported_categories = (HALF_DAY, PUBLIC)
     supported_languages = ("en_US", "tr", "uk")
+    # Law 2739 of 27 May 1935.
+    start_year = 1936
 
     def __init__(self, *args, **kwargs):
         InternationalHolidays.__init__(self)
@@ -43,10 +45,6 @@ class Turkey(HolidayBase, InternationalHolidays, IslamicHolidays, StaticHolidays
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Law 2739 of 27 May 1935.
-        if self._year <= 1935:
-            return None
-
         # New Year's Day.
         self._add_new_years_day(tr("Yılbaşı"))
 
@@ -103,9 +101,6 @@ class Turkey(HolidayBase, InternationalHolidays, IslamicHolidays, StaticHolidays
         self._add_eid_al_adha_day_four(name)
 
     def _populate_half_day_holidays(self):
-        if self._year <= 1935:
-            return None
-
         # %s (from 1pm).
         begin_time_label = self.tr("%s (saat 13.00'ten)")
 
diff --git a/holidays/countries/ukraine.py b/holidays/countries/ukraine.py
index ff709c6a..8f4eca79 100644
--- a/holidays/countries/ukraine.py
+++ b/holidays/countries/ukraine.py
@@ -35,6 +35,8 @@ class Ukraine(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Sta
     observed_label = tr("%s (вихідний)")
     supported_categories = (PUBLIC, WORKDAY)
     supported_languages = ("ar", "en_US", "uk")
+    # The current set of holidays came into force in 1991.
+    start_year = 1991
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self, JULIAN_REVISED_CALENDAR)
@@ -53,10 +55,6 @@ class Ukraine(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Sta
         return date(1995, JAN, 27) <= dt <= date(1998, JAN, 9) or dt >= date(1999, APR, 23)
 
     def _populate_common(self, is_martial_law: bool = False):
-        # The current set of holidays came into force in 1991
-        if self._year <= 1990:
-            return None
-
         # There is no public holidays in Ukraine during the period of martial law
         # https://zakon.rada.gov.ua/laws/show/2136-20#n26
         # law is in force from March 15, 2022
diff --git a/holidays/countries/united_kingdom.py b/holidays/countries/united_kingdom.py
index d9ed5bda..f2c0b8c6 100644
--- a/holidays/countries/united_kingdom.py
+++ b/holidays/countries/united_kingdom.py
@@ -51,6 +51,8 @@ class UnitedKingdom(ObservedHolidayBase, ChristianHolidays, InternationalHoliday
         "Wales": "WLS",
     }
     _deprecated_subdivisions = ("UK",)
+    # Bank Holidays Act 1871
+    start_year = 1872
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -62,10 +64,6 @@ class UnitedKingdom(ObservedHolidayBase, ChristianHolidays, InternationalHoliday
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self) -> None:
-        # Bank Holidays Act 1871
-        if self._year <= 1871:
-            return None
-
         # Good Friday
         self._add_good_friday("Good Friday")
 
@@ -91,10 +89,6 @@ class UnitedKingdom(ObservedHolidayBase, ChristianHolidays, InternationalHoliday
                 self._add_holiday_last_mon_of_may(name)
 
     def _populate_subdiv_holidays(self):
-        # Bank Holidays Act 1871
-        if self._year <= 1871:
-            return None
-
         if self.subdiv != "SCT":
             # New Year's Day
             if self._year >= 1975:
diff --git a/holidays/countries/united_states.py b/holidays/countries/united_states.py
index b19eefdf..3905a8bf 100644
--- a/holidays/countries/united_states.py
+++ b/holidays/countries/united_states.py
@@ -127,6 +127,7 @@ class UnitedStates(ObservedHolidayBase, ChristianHolidays, InternationalHolidays
         "MH",
         "PW",
     )
+    start_year = 1777
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
diff --git a/holidays/countries/uruguay.py b/holidays/countries/uruguay.py
index a4e53be4..adbb75b5 100644
--- a/holidays/countries/uruguay.py
+++ b/holidays/countries/uruguay.py
@@ -39,6 +39,8 @@ class Uruguay(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Sta
     default_language = "es"
     supported_categories = (BANK, PUBLIC)
     supported_languages = ("en_US", "es", "uk")
+    # Law # 6997.
+    start_year = 1920
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -52,10 +54,6 @@ class Uruguay(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Sta
         return 1980 <= self._year <= 1983 or self._year >= 1997
 
     def _populate_public_holidays(self):
-        # Law # 6997.
-        if self._year <= 1919:
-            return None
-
         # New Year's Day.
         self._add_new_years_day(tr("Año Nuevo"))
 
@@ -105,9 +103,6 @@ class Uruguay(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Sta
         # These holidays are generally observed by schools, public sector offices, banks,
         # and a few private companies.
 
-        if self._year <= 1919:
-            return None
-
         # Children's Day.
         self._add_holiday_jan_6(tr("Día de los Niños"))
 
diff --git a/holidays/countries/uzbekistan.py b/holidays/countries/uzbekistan.py
index 7fdd9925..442d04d6 100644
--- a/holidays/countries/uzbekistan.py
+++ b/holidays/countries/uzbekistan.py
@@ -36,6 +36,7 @@ class Uzbekistan(ObservedHolidayBase, InternationalHolidays, IslamicHolidays, St
     # %s (observed, estimated).
     observed_estimated_label = tr("%s (ko‘chirilgan, taxminiy)")
     supported_languages = ("en_US", "uk", "uz")
+    start_year = 1992
 
     def __init__(self, *args, **kwargs):
         InternationalHolidays.__init__(self)
@@ -49,8 +50,6 @@ class Uzbekistan(ObservedHolidayBase, InternationalHolidays, IslamicHolidays, St
         return dt >= date(2023, APR, 30)
 
     def _populate_public_holidays(self):
-        if self._year <= 1991:
-            return None
         dts_observed = set()
 
         # New Year's Day.
diff --git a/holidays/countries/vanuatu.py b/holidays/countries/vanuatu.py
index 7e6fe162..7240c441 100644
--- a/holidays/countries/vanuatu.py
+++ b/holidays/countries/vanuatu.py
@@ -24,6 +24,8 @@ class Vanuatu(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Sta
 
     country = "VU"
     observed_label = "%s (observed)"
+    # On 30 July 1980, Vanuatu gained independence from Britain and France.
+    start_year = 1981
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -33,10 +35,6 @@ class Vanuatu(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Sta
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # On 30 July 1980, Vanuatu gained independence from Britain and France.
-        if self._year <= 1980:
-            return None
-
         # New Years Day.
         self._add_observed(self._add_new_years_day("New Year's Day"))
 
diff --git a/holidays/countries/vatican_city.py b/holidays/countries/vatican_city.py
index 09c05245..fba38017 100644
--- a/holidays/countries/vatican_city.py
+++ b/holidays/countries/vatican_city.py
@@ -23,15 +23,13 @@ class VaticanCity(HolidayBase, ChristianHolidays):
     """
 
     country = "VA"
+    start_year = 1929
 
     def __init__(self, *args, **kwargs) -> None:
         ChristianHolidays.__init__(self)
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self) -> None:
-        if self._year <= 1928:
-            return None
-
         # Solemnity of Mary Day.
         # This is supposedly the same as International New Year.
         # Modern adoption across the entire Latin Church in 1931 though this
diff --git a/holidays/countries/venezuela.py b/holidays/countries/venezuela.py
index c949f0b1..ba75f667 100644
--- a/holidays/countries/venezuela.py
+++ b/holidays/countries/venezuela.py
@@ -24,6 +24,7 @@ class Venezuela(HolidayBase, ChristianHolidays, InternationalHolidays):
     country = "VE"
     default_language = "es"
     supported_languages = ("en_US", "es", "uk")
+    start_year = 1801
 
     def __init__(self, *args, **kwargs) -> None:
         ChristianHolidays.__init__(self)
diff --git a/holidays/countries/zambia.py b/holidays/countries/zambia.py
index bd346761..8822084f 100644
--- a/holidays/countries/zambia.py
+++ b/holidays/countries/zambia.py
@@ -25,6 +25,7 @@ class Zambia(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
 
     country = "ZM"
     observed_label = "%s (observed)"
+    start_year = 1965
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -34,10 +35,6 @@ class Zambia(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, Stat
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Observed since 1965
-        if self._year <= 1964:
-            return None
-
         # New Year's Day.
         self._add_observed(self._add_new_years_day("New Year's Day"))
 
diff --git a/holidays/countries/zimbabwe.py b/holidays/countries/zimbabwe.py
index f37c1f68..48113d28 100644
--- a/holidays/countries/zimbabwe.py
+++ b/holidays/countries/zimbabwe.py
@@ -22,6 +22,7 @@ class Zimbabwe(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
 
     country = "ZW"
     observed_label = "%s (observed)"
+    start_year = 1988
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -30,9 +31,6 @@ class Zimbabwe(ObservedHolidayBase, ChristianHolidays, InternationalHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        if self._year <= 1987:
-            return None
-
         # New Year's Day.
         self._add_observed(self._add_new_years_day("New Year's Day"))
 
diff --git a/holidays/financial/brasil_bolsa_balcao.py b/holidays/financial/brasil_bolsa_balcao.py
index bfb434e2..94ea0129 100644
--- a/holidays/financial/brasil_bolsa_balcao.py
+++ b/holidays/financial/brasil_bolsa_balcao.py
@@ -35,6 +35,10 @@ class BrasilBolsaBalcao(HolidayBase, ChristianHolidays, InternationalHolidays):
     market = "BVMF"
     default_language = "pt_BR"
     supported_languages = ("en_US", "pt_BR", "uk")
+    # Decreto n. 155-B, de 14.01.1890
+    # Curiously enough, 1890 is also the year of foundation of the
+    # São Paulo Stock Exchange, which would later become the B3.
+    start_year = 1890
 
     def __init__(self, *args, **kwargs) -> None:
         ChristianHolidays.__init__(self)
@@ -42,12 +46,6 @@ class BrasilBolsaBalcao(HolidayBase, ChristianHolidays, InternationalHolidays):
         super().__init__(*args, **kwargs)
 
     def _populate_public_holidays(self):
-        # Decreto n. 155-B, de 14.01.1890
-        # Curiously enough, 1890 is also the year of foundation of the
-        # São Paulo Stock Exchange, which would later become the B3.
-        if self._year <= 1889:
-            return None
-
         # Universal Fraternization Day.
         self._add_new_years_day(tr("Confraternização Universal"))
 
diff --git a/holidays/financial/european_central_bank.py b/holidays/financial/european_central_bank.py
index 03e2fc83..abc47eec 100644
--- a/holidays/financial/european_central_bank.py
+++ b/holidays/financial/european_central_bank.py
@@ -24,6 +24,7 @@ class EuropeanCentralBank(HolidayBase, ChristianHolidays, InternationalHolidays)
     """
 
     market = "ECB"
+    start_year = 2000
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -31,11 +32,7 @@ class EuropeanCentralBank(HolidayBase, ChristianHolidays, InternationalHolidays)
         StaticHolidays.__init__(self, EuropeanCentralBankStaticHolidays)
         super().__init__(*args, **kwargs)
 
-    def _populate(self, year):
-        if year <= 1999:
-            return None
-        super()._populate(year)
-
+    def _populate_public_holidays(self):
         self._add_new_years_day("New Year's Day")
 
         self._add_good_friday("Good Friday")
diff --git a/holidays/financial/ice_futures_europe.py b/holidays/financial/ice_futures_europe.py
index 10e8c323..1673a84e 100644
--- a/holidays/financial/ice_futures_europe.py
+++ b/holidays/financial/ice_futures_europe.py
@@ -24,6 +24,7 @@ class ICEFuturesEurope(ObservedHolidayBase, ChristianHolidays, InternationalHoli
     """
 
     market = "IFEU"
+    start_year = 2014
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -31,11 +32,7 @@ class ICEFuturesEurope(ObservedHolidayBase, ChristianHolidays, InternationalHoli
         kwargs.setdefault("observed_rule", SAT_TO_NONE + SUN_TO_NEXT_MON)
         super().__init__(*args, **kwargs)
 
-    def _populate(self, year):
-        if year <= 2013:
-            return None
-        super()._populate(year)
-
+    def _populate_public_holidays(self):
         self._move_holiday(self._add_new_years_day("New Year's Day"))
 
         self._add_good_friday("Good Friday")
diff --git a/holidays/financial/ny_stock_exchange.py b/holidays/financial/ny_stock_exchange.py
index 2cc2ce27..9231c71f 100644
--- a/holidays/financial/ny_stock_exchange.py
+++ b/holidays/financial/ny_stock_exchange.py
@@ -45,6 +45,7 @@ class NewYorkStockExchange(
 
     market = "NYSE"
     observed_label = "%s (observed)"
+    start_year = 1863
 
     def __init__(self, *args, **kwargs):
         ChristianHolidays.__init__(self)
@@ -53,67 +54,65 @@ class NewYorkStockExchange(
         kwargs.setdefault("observed_rule", SAT_TO_PREV_FRI + SUN_TO_NEXT_MON)
         super().__init__(*args, **kwargs)
 
-    def _populate(self, year):
-        super()._populate(year)
-
+    def _populate_public_holidays(self):
         # New Year's Day.
         name = "New Year's Day"
         self._move_holiday(self._add_new_years_day(name))
 
         # MLK, 3rd Monday of January.
-        if year >= 1998:
+        if self._year >= 1998:
             self._add_holiday_3rd_mon_of_jan("Martin Luther King Jr. Day")
 
         # LINCOLN BIRTHDAY: observed 1896 - 1953 and 1968, Feb 12 (observed)
-        if 1896 <= year <= 1953 or year == 1968:
+        if 1896 <= self._year <= 1953 or self._year == 1968:
             self._move_holiday(self._add_holiday_feb_12("Lincoln's Birthday"))
 
         # WASHINGTON'S BIRTHDAY: Feb 22 (obs) until 1971, then 3rd Mon of Feb
         name = "Washington's Birthday"
-        if year <= 1970:
+        if self._year <= 1970:
             self._move_holiday(self._add_holiday_feb_22(name))
         else:
             self._add_holiday_3rd_mon_of_feb(name)
 
         # GOOD FRIDAY - closed every year except 1898, 1906, and 1907
-        if year not in {1898, 1906, 1907}:
+        if self._year not in {1898, 1906, 1907}:
             self._add_good_friday("Good Friday")
 
         # MEM DAY (May 30) - closed every year since 1873
         # last Mon in May since 1971
-        if year >= 1873:
+        if self._year >= 1873:
             name = "Memorial Day"
-            if year <= 1970:
+            if self._year <= 1970:
                 self._move_holiday(self._add_holiday_may_30(name))
             else:
                 self._add_holiday_last_mon_of_may(name)
 
         # FLAG DAY: June 14th 1916 - 1953
-        if 1916 <= year <= 1953:
+        if 1916 <= self._year <= 1953:
             self._move_holiday(self._add_holiday_jun_14("Flag Day"))
 
         # JUNETEENTH: since 2022
-        if year >= 2022:
+        if self._year >= 2022:
             self._move_holiday(self._add_holiday_jun_19("Juneteenth National Independence Day"))
 
         # INDEPENDENCE DAY (July 4) - history suggests closed every year
         self._move_holiday(self._add_holiday_jul_4("Independence Day"))
 
         # LABOR DAY - first mon in Sept, since 1887
-        if year >= 1887:
+        if self._year >= 1887:
             self._add_holiday_1st_mon_of_sep("Labor Day")
 
         # COLUMBUS DAY/INDIGENOUS PPL DAY: Oct 12 - closed 1909-1953
-        if 1909 <= year <= 1953:
+        if 1909 <= self._year <= 1953:
             self._move_holiday(self._add_columbus_day("Columbus Day"))
 
         # ELECTION DAY: Tuesday after first Monday in November (2 U.S. Code §7)
         # closed until 1969, then closed pres years 1972-80
-        if year <= 1968 or year in {1972, 1976, 1980}:
+        if self._year <= 1968 or self._year in {1972, 1976, 1980}:
             self._add_holiday_1_day_past_1st_mon_of_nov("Election Day")
 
         # VETERAN'S DAY: Nov 11 - closed 1918, 1921, 1934-1953
-        if year in {1918, 1921} or 1934 <= year <= 1953:
+        if self._year in {1918, 1921} or 1934 <= self._year <= 1953:
             self._move_holiday(self._add_remembrance_day("Veteran's Day"))
 
         # THXGIVING DAY: 4th Thurs in Nov - closed every year
@@ -123,17 +122,17 @@ class NewYorkStockExchange(
         self._move_holiday(self._add_christmas_day("Christmas Day"))
 
         # Special holidays.
-        if year == 1914:
+        if self._year == 1914:
             # Beginning of WWI.
-            begin = date(year, JUL, 31)
-            end = date(year, NOV, 27)
+            begin = date(self._year, JUL, 31)
+            end = date(self._year, NOV, 27)
             for dt in (_timedelta(begin, n) for n in range((end - begin).days + 1)):
                 if self._is_weekend(dt) or dt in self:
                     continue
                 self._add_holiday("World War I", dt)
-        elif year == 1968:
-            begin = date(year, JUN, 12)
-            end = date(year, DEC, 24)
+        elif self._year == 1968:
+            begin = date(self._year, JUN, 12)
+            end = date(self._year, DEC, 24)
             # Wednesday special holiday.
             for dt in (_timedelta(begin, n) for n in range(0, (end - begin).days + 1, 7)):
                 self._add_holiday("Paper Crisis", dt)
diff --git a/holidays/holiday_base.py b/holidays/holiday_base.py
index 70d8b80e..bf0bc72e 100644
--- a/holidays/holiday_base.py
+++ b/holidays/holiday_base.py
@@ -39,7 +39,7 @@ from holidays.calendars.gregorian import (
     MONTHS,
     WEEKDAYS,
 )
-from holidays.constants import HOLIDAY_NAME_DELIMITER, PUBLIC
+from holidays.constants import HOLIDAY_NAME_DELIMITER, PUBLIC, DEFAULT_START_YEAR, DEFAULT_END_YEAR
 from holidays.helpers import _normalize_arguments, _normalize_tuple
 
 CategoryArg = Union[str, Iterable[str]]
@@ -245,6 +245,10 @@ class HolidayBase(dict[date, str]):
     """All holiday categories supported by this entity."""
     supported_languages: tuple[str, ...] = ()
     """All languages supported by this entity."""
+    start_year: int = DEFAULT_START_YEAR
+    """Start year of holidays presence for this entity."""
+    end_year: int = DEFAULT_END_YEAR
+    """End year of holidays presence for this entity."""
 
     def __init__(
         self,
@@ -829,6 +833,9 @@ class HolidayBase(dict[date, str]):
         >>> us_holidays.update(country_holidays('US', years=2021))
         """
 
+        if year < self.start_year or year > self.end_year:
+            return None
+
         self._year = year
         self._populate_common_holidays()
         self._populate_subdiv_holidays()
diff --git a/snapshots/countries/AZ_COMMON.json b/snapshots/countries/AZ_COMMON.json
index 95d1045d..c5672109 100644
--- a/snapshots/countries/AZ_COMMON.json
+++ b/snapshots/countries/AZ_COMMON.json
@@ -732,10 +732,13 @@
     "2024-11-12": "Constitution Day; Day off (substituted from 11/16/2024)",
     "2024-11-13": "Day off (substituted from 11/23/2024)",
     "2024-11-17": "National Revival Day",
+    "2024-12-30": "Day off (substituted from 12/28/2024)",
     "2024-12-31": "International Azerbaijanis Solidarity Day",
     "2025-01-01": "New Year's Day",
     "2025-01-02": "New Year's Day",
+    "2025-01-03": "Day off (substituted from 12/29/2024)",
     "2025-01-20": "Martyrs' Day",
+    "2025-01-29": "Municipal elections",
     "2025-03-08": "Women's Day",
     "2025-03-10": "Women's Day (observed)",
     "2025-03-20": "Spring Festival",


Test patch:
diff --git a/tests/countries/test_austria.py b/tests/countries/test_austria.py
index 33b05f69..33398062 100644
--- a/tests/countries/test_austria.py
+++ b/tests/countries/test_austria.py
@@ -20,23 +20,22 @@ from tests.common import CommonCountryTests
 class TestAustria(CommonCountryTests, TestCase):
     @classmethod
     def setUpClass(cls):
-        super().setUpClass(Austria, years=range(1900, 2050))
+        super().setUpClass(Austria, years=range(1901, 2050))
 
     def test_country_aliases(self):
         self.assertAliases(Austria, AT, AUT)
 
     def test_new_years(self):
-        self.assertHolidayName("Neujahr", (f"{year}-01-01" for year in range(1900, 2050)))
+        self.assertHolidayName("Neujahr", (f"{year}-01-01" for year in range(1901, 2050)))
 
     def test_epiphany(self):
         self.assertHolidayName(
-            "Heilige Drei Könige", (f"{year}-01-06" for year in range(1900, 2050))
+            "Heilige Drei Könige", (f"{year}-01-06" for year in range(1901, 2050))
         )
 
     def test_easter_monday(self):
         self.assertHolidayName(
             "Ostermontag",
-            "1900-04-16",
             "1901-04-08",
             "1902-03-31",
             "1999-04-05",
@@ -50,12 +49,11 @@ class TestAustria(CommonCountryTests, TestCase):
         )
 
     def test_labour_day(self):
-        self.assertHolidayName("Staatsfeiertag", (f"{year}-05-01" for year in range(1900, 2050)))
+        self.assertHolidayName("Staatsfeiertag", (f"{year}-05-01" for year in range(1901, 2050)))
 
     def test_ascension_day(self):
         self.assertHolidayName(
             "Christi Himmelfahrt",
-            "1900-05-24",
             "1901-05-16",
             "1902-05-08",
             "1999-05-13",
@@ -71,7 +69,6 @@ class TestAustria(CommonCountryTests, TestCase):
     def test_whit_monday(self):
         self.assertHolidayName(
             "Pfingstmontag",
-            "1900-06-04",
             "1901-05-27",
             "1902-05-19",
             "1999-05-24",
@@ -87,7 +84,6 @@ class TestAustria(CommonCountryTests, TestCase):
     def test_corpus_christi(self):
         self.assertHolidayName(
             "Fronleichnam",
-            "1900-06-14",
             "1901-06-06",
             "1902-05-29",
             "1999-06-03",
@@ -102,7 +98,7 @@ class TestAustria(CommonCountryTests, TestCase):
 
     def test_assumption_day(self):
         self.assertHolidayName(
-            "Mariä Himmelfahrt", (f"{year}-08-15" for year in range(1900, 2050))
+            "Mariä Himmelfahrt", (f"{year}-08-15" for year in range(1901, 2050))
         )
 
     def test_national_day(self):
@@ -112,19 +108,19 @@ class TestAustria(CommonCountryTests, TestCase):
             (f"{year}-10-26" for year in range(1967, 2050)),
         )
         self.assertNoHoliday("1918-11-12", "1935-11-12", "1966-10-26")
-        self.assertNoHolidayName("Nationalfeiertag", range(1900, 1919), range(1935, 1967))
+        self.assertNoHolidayName("Nationalfeiertag", range(1901, 1919), range(1935, 1967))
 
     def test_all_saints_day(self):
-        self.assertHolidayName("Allerheiligen", (f"{year}-11-01" for year in range(1900, 2050)))
+        self.assertHolidayName("Allerheiligen", (f"{year}-11-01" for year in range(1901, 2050)))
 
     def test_immaculate_conception_day(self):
-        self.assertHolidayName("Mariä Empfängnis", (f"{year}-12-08" for year in range(1900, 2050)))
+        self.assertHolidayName("Mariä Empfängnis", (f"{year}-12-08" for year in range(1901, 2050)))
 
     def test_christmas_day(self):
-        self.assertHolidayName("Christtag", (f"{year}-12-25" for year in range(1900, 2050)))
+        self.assertHolidayName("Christtag", (f"{year}-12-25" for year in range(1901, 2050)))
 
     def test_st_stephens_day(self):
-        self.assertHolidayName("Stefanitag", (f"{year}-12-26" for year in range(1900, 2050)))
+        self.assertHolidayName("Stefanitag", (f"{year}-12-26" for year in range(1901, 2050)))
 
     def test_2022(self):
         self.assertHolidays(
diff --git a/tests/countries/test_azerbaijan.py b/tests/countries/test_azerbaijan.py
index f4a2e807..462b1359 100644
--- a/tests/countries/test_azerbaijan.py
+++ b/tests/countries/test_azerbaijan.py
@@ -34,6 +34,7 @@ class TestAzerbaijan(CommonCountryTests, TestCase):
             "2018-04-11",
             "2019-12-27",
             "2024-02-07",
+            "2025-01-29",
             "2072-01-05",
         )
 
@@ -61,6 +62,8 @@ class TestAzerbaijan(CommonCountryTests, TestCase):
             "2024-04-12",
             "2024-11-12",
             "2024-11-13",
+            "2024-12-30",
+            "2025-01-03",
         )
 
     def test_new_years_day(self):
diff --git a/tests/countries/test_israel.py b/tests/countries/test_israel.py
index 4c55dffa..adba83ef 100644
--- a/tests/countries/test_israel.py
+++ b/tests/countries/test_israel.py
@@ -12,7 +12,7 @@
 
 from unittest import TestCase
 
-from holidays.constants import OPTIONAL, SCHOOL
+from holidays.constants import OPTIONAL, PUBLIC, SCHOOL
 from holidays.countries.israel import Israel, IL, ISR
 from tests.common import CommonCountryTests
 
@@ -29,15 +29,8 @@ class TestIsrael(CommonCountryTests, TestCase):
     def test_country_aliases(self):
         self.assertAliases(Israel, IL, ISR)
 
-    def test_not_implemented(self):
-        self.assertRaises(NotImplementedError, lambda: Israel(years=2101))
-        self.assertRaises(NotImplementedError, lambda: Israel(categories=(OPTIONAL,), years=2101))
-        self.assertRaises(NotImplementedError, lambda: Israel(categories=(SCHOOL,), years=2101))
-
     def test_no_holidays(self):
-        self.assertNoHolidays(Israel(years=1947))
-        self.assertNoHolidays(Israel(categories=(OPTIONAL,), years=1947))
-        self.assertNoHolidays(Israel(categories=(SCHOOL,), years=1947))
+        self.assertNoHolidays(Israel(categories=(OPTIONAL, PUBLIC, SCHOOL), years=1947))
 
     def test_independence_day(self):
         name = "יום העצמאות"
diff --git a/tests/countries/test_japan.py b/tests/countries/test_japan.py
index 01bfb976..d7a4b571 100644
--- a/tests/countries/test_japan.py
+++ b/tests/countries/test_japan.py
@@ -12,7 +12,7 @@
 
 from unittest import TestCase
 
-from holidays.constants import BANK
+from holidays.constants import BANK, PUBLIC
 from holidays.countries.japan import Japan, JP, JPN
 from tests.common import CommonCountryTests
 
@@ -25,15 +25,9 @@ class TestJapan(CommonCountryTests, TestCase):
     def test_country_aliases(self):
         self.assertAliases(Japan, JP, JPN)
 
-    def test_not_implemented(self):
-        with self.assertRaises(NotImplementedError):
-            Japan(years=1945)
-        with self.assertRaises(NotImplementedError):
-            Japan(years=2100)
-        with self.assertRaises(NotImplementedError):
-            Japan(categories=BANK, years=1945)
-        with self.assertRaises(NotImplementedError):
-            Japan(categories=BANK, years=2100)
+    def test_no_holidays(self):
+        self.assertNoHolidays(Japan(categories=(BANK, PUBLIC), years=1948))
+        self.assertNoHolidays(Japan(categories=(BANK, PUBLIC), years=2100))
 
     def test_new_years_day(self):
         self.assertHolidayName("元日", (f"{year}-01-01" for year in range(1949, 2051)))
diff --git a/tests/countries/test_liechtenstein.py b/tests/countries/test_liechtenstein.py
index 5a7a9b52..8f66d76e 100644
--- a/tests/countries/test_liechtenstein.py
+++ b/tests/countries/test_liechtenstein.py
@@ -20,7 +20,7 @@ from tests.common import CommonCountryTests
 class TestLiechtenstein(CommonCountryTests, TestCase):
     @classmethod
     def setUpClass(cls):
-        years = range(1900, 2050)
+        years = range(1901, 2050)
         super().setUpClass(Liechtenstein, years=years)
         cls.bank_holidays = Liechtenstein(categories=BANK, years=years)
 
@@ -28,28 +28,27 @@ class TestLiechtenstein(CommonCountryTests, TestCase):
         self.assertAliases(Liechtenstein, LI, LIE)
 
     def test_new_years(self):
-        self.assertHolidayName("Neujahr", (f"{year}-01-01" for year in range(1900, 2050)))
+        self.assertHolidayName("Neujahr", (f"{year}-01-01" for year in range(1901, 2050)))
 
     def test_saint_berchtolds_day(self):
         name = "Berchtoldstag"
         self.assertHolidayName(
-            name, self.bank_holidays, (f"{year}-01-02" for year in range(1900, 2050))
+            name, self.bank_holidays, (f"{year}-01-02" for year in range(1901, 2050))
         )
-        self.assertNoHoliday(f"{year}-01-02" for year in range(1900, 2050))
+        self.assertNoHoliday(f"{year}-01-02" for year in range(1901, 2050))
         self.assertNoHolidayName(name)
 
     def test_epiphany(self):
         self.assertHolidayName(
-            "Heilige Drei Könige", (f"{year}-01-06" for year in range(1900, 2050))
+            "Heilige Drei Könige", (f"{year}-01-06" for year in range(1901, 2050))
         )
 
     def test_candlemas(self):
-        self.assertHolidayName("Mariä Lichtmess", (f"{year}-02-02" for year in range(1900, 2050)))
+        self.assertHolidayName("Mariä Lichtmess", (f"{year}-02-02" for year in range(1901, 2050)))
 
     def test_shrove_tuesday(self):
         name = "Fasnachtsdienstag"
         dt = (
-            "1900-02-27",
             "1901-02-19",
             "1902-02-11",
             "1999-02-16",
@@ -65,12 +64,11 @@ class TestLiechtenstein(CommonCountryTests, TestCase):
         self.assertNoHolidayName(name)
 
     def test_saint_josephs_day(self):
-        self.assertHolidayName("Josefstag", (f"{year}-03-19" for year in range(1900, 2050)))
+        self.assertHolidayName("Josefstag", (f"{year}-03-19" for year in range(1901, 2050)))
 
     def test_good_friday(self):
         name = "Karfreitag"
         dt = (
-            "1900-04-13",
             "1901-04-05",
             "1902-03-28",
             "1999-04-02",
@@ -88,7 +86,6 @@ class TestLiechtenstein(CommonCountryTests, TestCase):
     def test_easter(self):
         self.assertHolidayName(
             "Ostersonntag",
-            "1900-04-15",
             "1901-04-07",
             "1902-03-30",
             "1999-04-04",
@@ -103,7 +100,6 @@ class TestLiechtenstein(CommonCountryTests, TestCase):
     def test_easter_monday(self):
         self.assertHolidayName(
             "Ostermontag",
-            "1900-04-16",
             "1901-04-08",
             "1902-03-31",
             "1999-04-05",
@@ -116,12 +112,11 @@ class TestLiechtenstein(CommonCountryTests, TestCase):
         )
 
     def test_labor_day(self):
-        self.assertHolidayName("Tag der Arbeit", (f"{year}-05-01" for year in range(1900, 2050)))
+        self.assertHolidayName("Tag der Arbeit", (f"{year}-05-01" for year in range(1901, 2050)))
 
     def test_ascension_day(self):
         self.assertHolidayName(
             "Auffahrt",
-            "1900-05-24",
             "1901-05-16",
             "1902-05-08",
             "1999-05-13",
@@ -136,7 +131,6 @@ class TestLiechtenstein(CommonCountryTests, TestCase):
     def test_whit_sunday(self):
         self.assertHolidayName(
             "Pfingstsonntag",
-            "1900-06-03",
             "1901-05-26",
             "1902-05-18",
             "1999-05-23",
@@ -151,7 +145,6 @@ class TestLiechtenstein(CommonCountryTests, TestCase):
     def test_whit_monday(self):
         self.assertHolidayName(
             "Pfingstmontag",
-            "1900-06-04",
             "1901-05-27",
             "1902-05-19",
             "1999-05-24",
@@ -166,7 +159,6 @@ class TestLiechtenstein(CommonCountryTests, TestCase):
     def test_corpus_christi(self):
         self.assertHolidayName(
             "Fronleichnam",
-            "1900-06-14",
             "1901-06-06",
             "1902-05-29",
             "1999-06-03",
@@ -179,37 +171,37 @@ class TestLiechtenstein(CommonCountryTests, TestCase):
         )
 
     def test_national_day(self):
-        self.assertHolidayName("Staatsfeiertag", (f"{year}-08-15" for year in range(1900, 2050)))
+        self.assertHolidayName("Staatsfeiertag", (f"{year}-08-15" for year in range(1901, 2050)))
 
     def test_nativity_of_mary(self):
-        self.assertHolidayName("Mariä Geburt", (f"{year}-09-08" for year in range(1900, 2050)))
+        self.assertHolidayName("Mariä Geburt", (f"{year}-09-08" for year in range(1901, 2050)))
 
     def test_all_saints_day(self):
-        self.assertHolidayName("Allerheiligen", (f"{year}-11-01" for year in range(1900, 2050)))
+        self.assertHolidayName("Allerheiligen", (f"{year}-11-01" for year in range(1901, 2050)))
 
     def test_immaculate_conception(self):
-        self.assertHolidayName("Mariä Empfängnis", (f"{year}-12-08" for year in range(1900, 2050)))
+        self.assertHolidayName("Mariä Empfängnis", (f"{year}-12-08" for year in range(1901, 2050)))
 
     def test_christmas_eve(self):
         name = "Heiligabend"
         self.assertHolidayName(
-            name, self.bank_holidays, (f"{year}-12-24" for year in range(1900, 2050))
+            name, self.bank_holidays, (f"{year}-12-24" for year in range(1901, 2050))
         )
-        self.assertNoHoliday(f"{year}-12-24" for year in range(1900, 2050))
+        self.assertNoHoliday(f"{year}-12-24" for year in range(1901, 2050))
         self.assertNoHolidayName(name)
 
     def test_christmas_day(self):
-        self.assertHolidayName("Weihnachten", (f"{year}-12-25" for year in range(1900, 2050)))
+        self.assertHolidayName("Weihnachten", (f"{year}-12-25" for year in range(1901, 2050)))
 
     def test_st_stephens_day(self):
-        self.assertHolidayName("Stephanstag", (f"{year}-12-26" for year in range(1900, 2050)))
+        self.assertHolidayName("Stephanstag", (f"{year}-12-26" for year in range(1901, 2050)))
 
     def test_new_years_eve(self):
         name = "Silvester"
         self.assertHolidayName(
-            name, self.bank_holidays, (f"{year}-12-31" for year in range(1900, 2050))
+            name, self.bank_holidays, (f"{year}-12-31" for year in range(1901, 2050))
         )
-        self.assertNoHoliday(f"{year}-12-31" for year in range(1900, 2050))
+        self.assertNoHoliday(f"{year}-12-31" for year in range(1901, 2050))
         self.assertNoHolidayName(name)
 
     def test_2022(self):
diff --git a/tests/countries/test_mexico.py b/tests/countries/test_mexico.py
index 74368cca..d61f694c 100644
--- a/tests/countries/test_mexico.py
+++ b/tests/countries/test_mexico.py
@@ -19,18 +19,18 @@ from tests.common import CommonCountryTests
 class TestMexico(CommonCountryTests, TestCase):
     @classmethod
     def setUpClass(cls):
-        super().setUpClass(Mexico, years=range(1900, 2050))
+        super().setUpClass(Mexico, years=range(1901, 2050))
 
     def test_country_aliases(self):
         self.assertAliases(Mexico, MX, MEX)
 
     def test_new_years_day(self):
-        self.assertHoliday(f"{year}-01-01" for year in range(1900, 2050))
+        self.assertHoliday(f"{year}-01-01" for year in range(1901, 2050))
 
     def test_constitution_day(self):
         self.assertHoliday(f"{year}-02-05" for year in range(1917, 2006))
-        self.assertNoHoliday(f"{year}-02-05" for year in range(1900, 1917))
-        self.assertNoHolidayName("Día de la Constitución", range(1900, 1917))
+        self.assertNoHoliday(f"{year}-02-05" for year in range(1901, 1917))
+        self.assertNoHolidayName("Día de la Constitución", range(1901, 1917))
         self.assertHoliday(
             "2006-02-06",
             "2007-02-05",
@@ -54,8 +54,8 @@ class TestMexico(CommonCountryTests, TestCase):
 
     def test_benito_juarez(self):
         self.assertHoliday(f"{year}-03-21" for year in range(1917, 2007))
-        self.assertNoHoliday(f"{year}-03-21" for year in range(1900, 1917))
-        self.assertNoHolidayName("Natalicio de Benito Juárez", range(1900, 1917))
+        self.assertNoHoliday(f"{year}-03-21" for year in range(1901, 1917))
+        self.assertNoHolidayName("Natalicio de Benito Juárez", range(1901, 1917))
         self.assertHoliday(
             "2007-03-19",
             "2008-03-17",
@@ -78,16 +78,16 @@ class TestMexico(CommonCountryTests, TestCase):
 
     def test_labour_day(self):
         self.assertHoliday(f"{year}-05-01" for year in range(1923, 2050))
-        self.assertNoHoliday(f"{year}-05-01" for year in range(1900, 1923))
-        self.assertNoHolidayName("Día del Trabajo", range(1900, 1923))
+        self.assertNoHoliday(f"{year}-05-01" for year in range(1901, 1923))
+        self.assertNoHolidayName("Día del Trabajo", range(1901, 1923))
 
     def test_independence_day(self):
-        self.assertHoliday(f"{year}-09-16" for year in range(1900, 2050))
+        self.assertHoliday(f"{year}-09-16" for year in range(1901, 2050))
 
     def test_revolution_day(self):
         self.assertHoliday(f"{year}-11-20" for year in range(1917, 2006))
-        self.assertNoHoliday(f"{year}-11-20" for year in range(1900, 1917))
-        self.assertNoHolidayName("Día de la Revolución", range(1900, 1917))
+        self.assertNoHoliday(f"{year}-11-20" for year in range(1901, 1917))
+        self.assertNoHolidayName("Día de la Revolución", range(1901, 1917))
         self.assertHoliday(
             "2006-11-20",
             "2007-11-19",
@@ -126,14 +126,14 @@ class TestMexico(CommonCountryTests, TestCase):
             f"{year}-12-01" for year in range(1970, 2050) if (year - 1970) % 6 > 0
         )
         name = "Transmisión del Poder Ejecutivo Federal"
-        self.assertNoHolidayName(name, range(1900, 1970))
+        self.assertNoHolidayName(name, range(1901, 1970))
         self.assertNoHolidayName(
             name, (year for year in range(1970, 2050) if (year - 1970) % 6 > 0)
         )
         self.assertNoHoliday("2024-12-01")
 
     def test_christmas_day(self):
-        self.assertHoliday(f"{year}-12-25" for year in range(1900, 2050))
+        self.assertHoliday(f"{year}-12-25" for year in range(1901, 2050))
 
     def test_l10n_default(self):
         self.assertLocalizedHolidays(
diff --git a/tests/countries/test_norway.py b/tests/countries/test_norway.py
index fb9ed86a..d0fd203f 100644
--- a/tests/countries/test_norway.py
+++ b/tests/countries/test_norway.py
@@ -25,7 +25,7 @@ class TestNorway(CommonCountryTests, SundayHolidays, TestCase):
         self.assertAliases(Norway, NO, NOR)
 
     def test_new_years(self):
-        self.assertHoliday("1900-01-01", "2017-01-01", "2023-01-01")
+        self.assertHoliday("1901-01-01", "2017-01-01", "2023-01-01")
 
     def test_easter(self):
         self.assertHoliday(
diff --git a/tests/countries/test_saint_kitts_and_nevis.py b/tests/countries/test_saint_kitts_and_nevis.py
index 2e430c69..9dd4abbd 100644
--- a/tests/countries/test_saint_kitts_and_nevis.py
+++ b/tests/countries/test_saint_kitts_and_nevis.py
@@ -143,7 +143,7 @@ class TestSaintKittsAndNevis(CommonCountryTests, TestCase):
         )
 
     def test_kim_collins_day(self):
-        self.assertNoHoliday(SaintKittsAndNevis(categories=WORKDAY), 2002)
+        self.assertNoHoliday(SaintKittsAndNevis(categories=WORKDAY), "2002-08-25")
         self.assertHoliday(
             SaintKittsAndNevis(categories=WORKDAY),
             (f"{year}-08-25" for year in range(2003, 2051)),
diff --git a/tests/countries/test_sweden.py b/tests/countries/test_sweden.py
index c30890d6..86cdea23 100644
--- a/tests/countries/test_sweden.py
+++ b/tests/countries/test_sweden.py
@@ -30,7 +30,7 @@ class TestSweden(CommonCountryTests, SundayHolidays, TestCase):
 
     def test_new_years(self):
         self.assertHoliday(
-            "1900-01-01",
+            "1901-01-01",
             "2017-01-01",
             "2023-01-01",
         )
@@ -80,7 +80,6 @@ class TestSweden(CommonCountryTests, SundayHolidays, TestCase):
         self.assertHoliday(
             "2005-06-06",
             "2017-06-06",
-            "2999-06-06",
         )
         self.assertNoHoliday("2004-06-06")
         self.assertNoHolidayName("Sveriges nationaldag", Sweden(years=2004))
diff --git a/tests/financial/test_ny_stock_exchange.py b/tests/financial/test_ny_stock_exchange.py
index dba564fb..e9a16ce7 100644
--- a/tests/financial/test_ny_stock_exchange.py
+++ b/tests/financial/test_ny_stock_exchange.py
@@ -43,6 +43,9 @@ class TestNewYorkStockExchange(CommonFinancialTests, TestCase):
     def test_market_aliases(self):
         self.assertAliases(NewYorkStockExchange, NYSE, XNYS)
 
+    def test_no_holidays(self):
+        self.assertNoHolidays(NewYorkStockExchange(years=1862))
+
     def test_new_years(self):
         for dt in (
             date(1900, JAN, 1),
diff --git a/tests/test_holiday_base.py b/tests/test_holiday_base.py
index 9a00fceb..4291dad8 100644
--- a/tests/test_holiday_base.py
+++ b/tests/test_holiday_base.py
@@ -74,6 +74,8 @@ class CountryStub1(EntityStub, StaticHolidays):
         "S_3": "3",
     }
     supported_categories = (PUBLIC, SCHOOL)
+    start_year = 1000
+    end_year = 3400
 
     def __init__(self, *args, **kwargs) -> None:
         StaticHolidays.__init__(self, cls=EntityStubStaticHolidays)
diff --git a/tests/test_holiday_groups.py b/tests/test_holiday_groups.py
index 7c3e0ce0..d96d8922 100644
--- a/tests/test_holiday_groups.py
+++ b/tests/test_holiday_groups.py
@@ -13,7 +13,12 @@
 from unittest import TestCase
 
 from holidays.calendars.thai import KHMER_CALENDAR
-from holidays.groups import ChristianHolidays, InternationalHolidays, ThaiCalendarHolidays
+from holidays.groups import (
+    ChristianHolidays,
+    InternationalHolidays,
+    PersianCalendarHolidays,
+    ThaiCalendarHolidays,
+)
 from holidays.holiday_base import HolidayBase
 
 
@@ -60,10 +65,35 @@ class TestInternationalHolidays(TestCase):
         )
 
 
+class TestPersianCalendarHolidays(TestCase):
+    def test_add_persian_calendar_holiday(self):
+        # Check for out-of-range dates.
+        class TestHolidays(HolidayBase, PersianCalendarHolidays):
+            end_year = 2102
+
+            def __init__(self, *args, **kwargs):
+                PersianCalendarHolidays.__init__(self)
+                super().__init__(*args, **kwargs)
+
+        test_holidays = TestHolidays()
+
+        test_holidays._populate(2102)
+        test_holidays._add_nowruz_day("Persian New Year")
+        test_holidays._add_islamic_republic_day("Islamic Republic Day")
+        test_holidays._add_natures_day("Nature's Day")
+        test_holidays._add_death_of_khomeini_day("Death of Khomeini")
+        test_holidays._add_khordad_uprising_day("Khordad National Uprising")
+        test_holidays._add_islamic_revolution_day("Islamic Revolution Day")
+        test_holidays._add_oil_nationalization_day("Iranian Oil Industry Nationalization Day")
+        self.assertEqual(0, len(test_holidays))
+
+
 class TestThaiCalendarHolidays(TestCase):
     def test_add_thai_calendar_holiday(self):
         # Check for out-of-range dates.
         class TestHolidays(HolidayBase, ThaiCalendarHolidays):
+            end_year = 2158
+
             def __init__(self, *args, **kwargs):
                 ThaiCalendarHolidays.__init__(self)
                 super().__init__(*args, **kwargs)