# holidays # -------- # A fast, efficient Python library for generating country, province and state # specific sets of holidays on the fly. It aims to make determining whether a # specific date is a holiday as fast and flexible as possible. # # Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file) # dr-prodigy (c) 2017-2023 # ryanss (c) 2014-2017 # Website: https://github.com/vacanza/holidays # License: MIT (see LICENSE file) from gettext import gettext as tr from typing import Union from holidays.calendars.gregorian import ( FEB, MAR, APR, MAY, SEP, NOV, DEC, MON, TUE, WED, THU, FRI, SAT, SUN, ) from holidays.constants import GOVERNMENT, PUBLIC, UNOFFICIAL from holidays.groups import ChristianHolidays, InternationalHolidays, StaticHolidays from holidays.observed_holiday_base import ( ObservedHolidayBase, ObservedRule, MON_TO_NEXT_TUE, FRI_TO_PREV_THU, SAT_TO_PREV_FRI, SUN_TO_NEXT_MON, SAT_SUN_TO_PREV_FRI, SAT_SUN_TO_NEXT_MON, ) GA_IN_WASHINGTON_BIRTHDAY = ObservedRule( {MON: +1, TUE: -1, WED: -1, THU: +1, FRI: -1, SAT: -2, SUN: -2} ) class UnitedStates(ObservedHolidayBase, ChristianHolidays, InternationalHolidays, StaticHolidays): """United States of America (the) holidays. References: * * * [Federal holidays](https://web.archive.org/web/20250426120914/https://opm.gov/policy-data-oversight/pay-leave/federal-holidays/) * [Federal holidays history](https://web.archive.org/web/20250626042129/https://www.congress.gov/crs_external_products/R/PDF/R41990/R41990.11.pdf) * [16 Stat. 168](https://web.archive.org/web/20240602080239/https://memory.loc.gov/cgi-bin/ampage?collId=llsl&fileName=016/llsl016.db&recNum=203) * [Thanksgiving Day Proclamations 1789-Present](https://web.archive.org/web/20240621142029/https://www.whatsoproudlywehail.org/curriculum/the-american-calendar/thanksgiving-day-proclamations-1789-present/) * [H.J. RES. 41](https://web.archive.org/web/20250222190611/https://www.archives.gov/global-pages/larger-image.html?i=/legislative/features/thanksgiving/images/joint-res-l.jpg&c=/legislative/features/thanksgiving/images/joint-res.caption.html) * [H.J. RES. 41 December 9th, 1941 Amendment](https://web.archive.org/web/20250523062313/https://www.archives.gov/global-pages/larger-image.html?i=/legislative/features/thanksgiving/images/amendment-l.jpg&c=/legislative/features/thanksgiving/images/amendment.caption.html) * [B-112525 February 27th, 1953 32 COMP. GEN. 378](https://web.archive.org/web/20201001081239/https://www.gao.gov/products/b-112525#mt=e-report) * [Public Law 89-554](https://web.archive.org/web/20250512204449/https://www.govinfo.gov/content/pkg/STATUTE-80/pdf/STATUTE-80-Pg378.pdf) * [E.O. 11582 of February 11th, 1971](https://web.archive.org/web/20250326234305/https://www.archives.gov/federal-register/codification/executive-order/11582.html) * Washington's Birthday: * [AK](https://web.archive.org/web/20250306070343/https://doa.alaska.gov/calendar/) * [AL](https://web.archive.org/web/20250125202410/https://admincode.legislature.state.al.us/administrative-code/670-X-12-.01) * [AR](https://web.archive.org/web/20250213100442/https://arkleg.state.ar.us/Home/FTPDocument?path=/ACTS/2001/Public/ACT304.pdf) * [AZ](https://web.archive.org/web/20250323052619/https://www.azleg.gov/ars/1/00301.htm) * [CA](https://web.archive.org/web/20250414210521/http://www.sos.ca.gov/state-holidays/) * [CO](https://web.archive.org/web/20250409020643/https://leg.colorado.gov/sites/default/files/images/olls/crs2023-title-24.pdf) * [GA](https://web.archive.org/web/20250204223228/https://www.gasupreme.us/court-information/holidays-2/) * [HI](https://web.archive.org/web/20250313033818/https://www.capitol.hawaii.gov/hrscurrent/Vol01_Ch0001-0042F/HRS0008/HRS_0008-0001.htm) * [ID](https://web.archive.org/web/20250328091357/https://idaho.gov/government/state-holidays/) * IN: * * * [MD](https://web.archive.org/web/20250310030503/https://msa.maryland.gov/msa/mdmanual/01glance/html/holidayl.html) * [MI](https://web.archive.org/web/20250328094534/https://www.michigan.gov/som/government/state-holidays) * [MN](https://web.archive.org/web/20250322174508/https://www.revisor.mn.gov/statutes/cite/645.44) * [MT](https://web.archive.org/web/20250408030903/https://archive.legmt.gov/bills/mca/title_0010/chapter_0010/part_0020/section_0160/0010-0010-0020-0160.html) * [NJ](https://web.archive.org/web/20250409164919/https://nj.gov/nj/about/facts/holidays/) * [OH](https://web.archive.org/web/20250307080858/https://codes.ohio.gov/ohio-revised-code/section-1.14) * [OK](https://web.archive.org/web/20250424191658/https://oklahoma.gov/omes/divisions/human-capital-management/employee-benefits/leave-holidays/holidays.html) * [OR](https://web.archive.org/web/20250209222310/https://www.oregonlegislature.gov/bills_laws/ors/ors187.html) * [PA](https://web.archive.org/web/20241226003617/https://www.legis.state.pa.us/WU01/LI/LI/US/PDF/1893/0/0138..PDF) * [PR](https://en.wikipedia.org/wiki/Public_holidays_in_Puerto_Rico) * [SC](https://web.archive.org/web/20250212044252/https://www.scstatehouse.gov/code/t53c005.php) * [TN](https://web.archive.org/web/20250404130210/https://www.tn.gov/about-tn/state-holidays.html) * [TX](https://web.archive.org/web/20250314100137/http://www.tsl.texas.gov/ref/abouttx/holidays) * [UT](https://web.archive.org/web/20250312095206/https://le.utah.gov/xcode/Title63G/Chapter1/63G-1-S301.html) * [VA](https://web.archive.org/web/20250309075526/https://law.lis.virginia.gov/vacode/title2.2/chapter33/section2.2-3300/) * [VT](https://web.archive.org/web/20250415013508/https://legislature.vermont.gov/statutes/section/01/007/00371) * [WA](https://web.archive.org/web/20250414010238/https://app.leg.wa.gov/RCW/default.aspx?cite=1.16.050) * [WV](https://web.archive.org/web/20250328050144/http://code.wvlegislature.gov/2-2-1/) * [WY](https://web.archive.org/web/20250405094801/https://ai.wyo.gov/about-us/state-holidays-and-office-closures) * Columbus Day / Indigenous Peoples' Day history: * * * * * * [Frances Xavier Cabrini Day](https://web.archive.org/web/20250405014031/https://leg.colorado.gov/sites/default/files/2020a_1031_signed.pdf) * Northern Mariana Islands (subdivision MP): * * * American Samoa: * """ country = "US" default_language = "en_US" # %s (observed). observed_label = tr("%s (observed)") supported_languages = ("en_US", "th") # Independence Declared on July 4th, 1776. start_year = 1777 subdivisions: Union[tuple[()], tuple[str, ...]] = ( "AK", # Alaska. "AL", # Alabama. "AR", # Arkansas. "AS", # American Samoa. "AZ", # Arizona. "CA", # California. "CO", # Colorado. "CT", # Connecticut. "DC", # District of Columbia. "DE", # Delaware. "FL", # Florida. "GA", # Georgia. "GU", # Guam. "HI", # Hawaii. "IA", # Iowa. "ID", # Idaho. "IL", # Illinois. "IN", # Indiana. "KS", # Kansas. "KY", # Kentucky. "LA", # Louisiana. "MA", # Massachusetts. "MD", # Maryland. "ME", # Maine. "MI", # Michigan. "MN", # Minnesota. "MO", # Missouri. "MP", # Northern Mariana Islands. "MS", # Mississippi. "MT", # Montana. "NC", # North Carolina. "ND", # North Dakota. "NE", # Nebraska. "NH", # New Hampshire. "NJ", # New Jersey. "NM", # New Mexico. "NV", # Nevada. "NY", # New York. "OH", # Ohio. "OK", # Oklahoma. "OR", # Oregon. "PA", # Pennsylvania. "PR", # Puerto Rico. "RI", # Rhode Island. "SC", # South Carolina. "SD", # South Dakota. "TN", # Tennessee. "TX", # Texas. "UM", # United States Minor Outlying Islands. "UT", # Utah. "VA", # Virginia. "VI", # Virgin Islands, U.S.. "VT", # Vermont. "WA", # Washington. "WI", # Wisconsin. "WV", # West Virginia. "WY", # Wyoming. ) subdivisions_aliases = { "Alaska": "AK", "Alabama": "AL", "Arkansas": "AR", "American Samoa": "AS", "Arizona": "AZ", "California": "CA", "Colorado": "CO", "Connecticut": "CT", "District of Columbia": "DC", "Delaware": "DE", "Florida": "FL", "Georgia": "GA", "Guam": "GU", "Hawaii": "HI", "Iowa": "IA", "Idaho": "ID", "Illinois": "IL", "Indiana": "IN", "Kansas": "KS", "Kentucky": "KY", "Louisiana": "LA", "Massachusetts": "MA", "Maryland": "MD", "Maine": "ME", "Michigan": "MI", "Minnesota": "MN", "Missouri": "MO", "Northern Mariana Islands": "MP", "Mississippi": "MS", "Montana": "MT", "North Carolina": "NC", "North Dakota": "ND", "Nebraska": "NE", "New Hampshire": "NH", "New Jersey": "NJ", "New Mexico": "NM", "Nevada": "NV", "New York": "NY", "Ohio": "OH", "Oklahoma": "OK", "Oregon": "OR", "Pennsylvania": "PA", "Puerto Rico": "PR", "Rhode Island": "RI", "South Carolina": "SC", "South Dakota": "SD", "Tennessee": "TN", "Texas": "TX", "United States Minor Outlying Islands": "UM", "Utah": "UT", "Virginia": "VA", "Virgin Islands, U.S.": "VI", "Vermont": "VT", "Washington": "WA", "Wisconsin": "WI", "West Virginia": "WV", "Wyoming": "WY", } supported_categories = (GOVERNMENT, PUBLIC, UNOFFICIAL) _deprecated_subdivisions = ( "FM", "MH", "PW", ) def __init__(self, *args, **kwargs): ChristianHolidays.__init__(self) InternationalHolidays.__init__(self) StaticHolidays.__init__(self, cls=UnitedStatesStaticHolidays) kwargs.setdefault("observed_rule", SAT_TO_PREV_FRI + SUN_TO_NEXT_MON) # B-11252 February 27th, 1953 32 COMP. GEN. 378. kwargs.setdefault("observed_since", 1953) super().__init__(*args, **kwargs) def _populate_common(self, include_federal: bool = False): """ Populates common US holidays. Federal Holidays were first codified on June 28th, 1870 via 16 Stat. 168. First regulation on holidays in-lieu observance is from B-112525 February 27th, 1953 32 COMP. GEN. 378 document which shifts from SUN to next MON only. It wouldn't be until Public Law 89-554 from September 6th, 1966 that SAT to previous MON is listed as well. This would be finally consolidated as part of E.O. 11582 of February 11th, 1971 later. :param include_federal: Whether to include federal-specific holidays. """ self._observed_rule = ( SAT_TO_PREV_FRI + SUN_TO_NEXT_MON if self._year >= 1966 else SUN_TO_NEXT_MON ) if self._year >= 1871: # New Year's Day. name = tr("New Year's Day") self._add_observed(self._add_new_years_day(name)) # Public Law 89-554 of September 6th, 1966. if self._year >= 1967: self._add_observed(self._next_year_new_years_day, name=name) if include_federal: if self._year >= 1986: # Birthday of Martin Luther King, Jr.. self._add_holiday_3rd_mon_of_jan(tr("Birthday of Martin Luther King, Jr.")) if self._year >= 1879: # Washington's Birthday. name = tr("Washington's Birthday") if self._year >= 1971: self._add_holiday_3rd_mon_of_feb(name) else: dt = self._add_holiday_feb_22(name) # B-112525 February 27th, 1953 32 COMP. GEN. 378. if self._year >= 1954: self._add_observed(dt) if self._year >= 1971: # Memorial Day. self._add_holiday_last_mon_of_may(tr("Memorial Day")) if self._year >= 2021: self._add_observed( # Juneteenth National Independence Day. self._add_holiday_jun_19(tr("Juneteenth National Independence Day")) ) if self._year >= 1870: # Independence Day. self._add_observed(self._add_holiday_jul_4(tr("Independence Day"))) if self._year >= 1894: # Labor Day. self._add_holiday_1st_mon_of_sep(tr("Labor Day")) if include_federal and self._year >= 1971: # Columbus Day. self._add_holiday_2nd_mon_of_oct(tr("Columbus Day")) if self._year >= 1938: name = ( # Veterans Day. tr("Veterans Day") if self._year >= 1954 # Armistice Day. else tr("Armistice Day") ) if 1971 <= self._year <= 1977: self._add_holiday_4th_mon_of_oct(name) else: self._add_observed(self._add_remembrance_day(name)) # Thanksgiving Day. # Began to be declared annually in 1862 by Abraham Lincoln. # First declared as last THU of NOV in 1863. # Briefly moved to 3rd THU of NOV by Franklin Delano Roosevelt from 1939 to 1941. # First codified as last THU of NOV on October 6th, 1941 via H.J. RES. 41. # Become 4th THU of NOV from 1942 onwards via a Senate Amendment on December 9th, 1941. # For Pre-1862 observances, see UnitedStatesStaticHolidays. if self._year >= 1862: thanksgiving_day_dates = { 1862: (APR, 10), 1865: (DEC, 7), 1869: (NOV, 18), 1939: (NOV, 23), 1940: (NOV, 21), 1941: (NOV, 20), } # Thanksgiving Day. name = tr("Thanksgiving Day") if dt := thanksgiving_day_dates.get(self._year): self._add_holiday(name, dt) elif self._year >= 1942: self._add_holiday_4th_thu_of_nov(name) else: self._add_holiday_last_thu_of_nov(name) if self._year >= 1870: # Christmas Day. self._add_observed(self._add_christmas_day(tr("Christmas Day"))) def _populate_public_holidays(self): self._populate_common() if 1888 <= self._year <= 1970: # Memorial Day. self._add_holiday_may_30(tr("Memorial Day")) def _add_christmas_eve_holiday(self): # If on Friday, observed on Thursday. # If on Saturday or Sunday, observed on Friday. # Christmas Eve. name = tr("Christmas Eve") self._add_observed( self._add_christmas_eve(name), name=name, rule=FRI_TO_PREV_THU + SAT_SUN_TO_PREV_FRI ) def _populate_subdiv_holidays(self): if PUBLIC not in self.categories: return None if self._year >= 1986 and self.subdiv not in {"AL", "AR", "AZ", "GA", "ID", "MS", "NH"}: # Martin Luther King Jr. Day. self._add_holiday_3rd_mon_of_jan(tr("Martin Luther King Jr. Day")) if self._year >= 1879 and self.subdiv not in { "AK", "AL", "AR", "AZ", "CA", "CO", "DE", "FL", "GA", "HI", "ID", "IN", "MD", "MN", "MT", "NJ", "NM", "OH", "OK", "OR", "PA", "PR", "SC", "TN", "TX", "UT", "VA", "VI", "VT", "WA", "WV", "WY", }: # Washington's Birthday. name = tr("Washington's Birthday") if self._year >= 1971: self._add_holiday_3rd_mon_of_feb(name) else: self._add_holiday_feb_22(name) if self._year >= 1937 and ( self.subdiv is None or self.subdiv in { "AS", "AZ", "CT", "GA", "ID", "IL", "IN", "MA", "MD", "MO", "MT", "NJ", "NY", "OH", "PA", "UT", "WV", } ): # Columbus Day. name = tr("Columbus Day") if self._year >= 1971: self._add_holiday_2nd_mon_of_oct(name) else: self._add_columbus_day(name) super()._populate_subdiv_holidays() def _populate_subdiv_ak_public_holidays(self): if self._year >= 1971: # Presidents' Day. self._add_holiday_3rd_mon_of_feb(tr("Presidents' Day")) # No observance in 1921: https://web.archive.org/web/20230208015211/https://chroniclingamerica.loc.gov/lccn/sn86072239/1922-03-29/ed-1/seq-8/ if self._year >= 1918 and self._year != 1921: # Seward's Day. name = tr("Seward's Day") if self._year >= 1955: self._add_holiday_last_mon_of_mar(name) else: self._add_holiday_mar_30(name) if self._year >= 1971: self._add_holiday_2nd_mon_of_oct( # Indigenous Peoples' Day. tr("Indigenous Peoples' Day") if self._year >= 2015 # Columbus Day. else tr("Columbus Day") ) # https://web.archive.org/web/20120502232826/http://www.alaskadispatch.com/article/happy-alaska-day-great-land if self._year >= 1917: # Alaska Day. self._add_observed(self._add_holiday_oct_18(tr("Alaska Day"))) def _populate_subdiv_al_public_holidays(self): if self._year >= 1986: self._add_holiday_3rd_mon_of_jan( # Martin Luther King, Jr & Robert E. Lee's Birthday. tr("Martin Luther King, Jr & Robert E. Lee's Birthday") ) if self._year >= 1879: # George Washington & Thomas Jefferson's Birthday. name = tr("George Washington & Thomas Jefferson's Birthday") if self._year >= 1971: self._add_holiday_3rd_mon_of_feb(name) else: self._add_holiday_feb_22(name) if self._year >= 1866: # Confederate Memorial Day. self._add_holiday_4th_mon_of_apr(tr("Confederate Memorial Day")) if self._year >= 1890: # Jefferson Davis Birthday. self._add_holiday_1st_mon_of_jun(tr("Jefferson Davis Birthday")) if self._year >= 1971: self._add_holiday_2nd_mon_of_oct( # Columbus Day / American Indian Heritage Day / Fraternal Day. tr("Columbus Day / American Indian Heritage Day / Fraternal Day") if self._year >= 2000 # Columbus Day / Fraternal Day. else tr("Columbus Day / Fraternal Day") ) def _populate_subdiv_ar_public_holidays(self): if self._year >= 1986: self._add_holiday_3rd_mon_of_jan( # Martin Luther King Jr. Day. tr("Martin Luther King Jr. Day") if self._year >= 2018 # Dr. Martin Luther King Jr. and Robert E. Lee's Birthdays. else tr("Dr. Martin Luther King Jr. and Robert E. Lee's Birthdays") ) if self._year >= 1879: # George Washington's Birthday and Daisy Gatson Bates Day. name = tr("George Washington's Birthday and Daisy Gatson Bates Day") if self._year >= 1971: self._add_holiday_3rd_mon_of_feb(name) else: self._add_holiday_feb_22(name) def _populate_subdiv_as_public_holidays(self): if self._year >= 1901: # American Samoa Flag Day. self._add_observed(self._add_holiday_apr_17(tr("American Samoa Flag Day"))) if self._year >= 1983: # Manu'a Islands Cession Day. self._add_observed(self._add_holiday_jul_16(tr("Manu'a Islands Cession Day"))) # White Sunday. self._add_holiday_2nd_sun_of_oct(tr("White Sunday")) def _populate_subdiv_az_public_holidays(self): if self._year >= 1986: # Dr. Martin Luther King Jr. / Civil Rights Day. self._add_holiday_3rd_mon_of_jan(tr("Dr. Martin Luther King Jr. / Civil Rights Day")) if self._year >= 1971: # Lincoln/Washington Presidents' Day. self._add_holiday_3rd_mon_of_feb(tr("Lincoln/Washington Presidents' Day")) def _populate_subdiv_ca_public_holidays(self): if 1971 <= self._year <= 2009: # Lincoln's Birthday. self._add_observed(self._add_holiday_feb_12(tr("Lincoln's Birthday"))) if self._year >= 1971: # Presidents' Day. self._add_holiday_3rd_mon_of_feb(tr("Presidents' Day")) if self._year >= 2014: # Susan B. Anthony Day. self._add_holiday_feb_15(tr("Susan B. Anthony Day")) if self._year >= 1995: self._add_observed( # Cesar Chavez Day. self._add_holiday_mar_31(tr("Cesar Chavez Day")), rule=SUN_TO_NEXT_MON, ) if 1971 <= self._year <= 2008: # Columbus Day. self._add_holiday_2nd_mon_of_oct(tr("Columbus Day")) if self._year >= 1975: # Day After Thanksgiving. self._add_holiday_1_day_past_4th_thu_of_nov(tr("Day After Thanksgiving")) def _populate_subdiv_co_public_holidays(self): if self._year >= 1971: # Washington-Lincoln Day. self._add_holiday_3rd_mon_of_feb(tr("Washington-Lincoln Day")) if self._year >= 2001: # Cesar Chavez Day. self._add_holiday_mar_31(tr("Cesar Chavez Day")) if self._year >= 2020: # Frances Xavier Cabrini Day. self._add_holiday_1st_mon_of_oct(tr("Frances Xavier Cabrini Day")) def _populate_subdiv_ct_public_holidays(self): if self._year >= 1971: # Lincoln's Birthday. self._add_observed(self._add_holiday_feb_12(tr("Lincoln's Birthday"))) # Good Friday. self._add_good_friday(tr("Good Friday")) def _populate_subdiv_dc_public_holidays(self): if self._year >= 1789 and (self._year - 1789) % 4 == 0: # Inauguration Day. name = tr("Inauguration Day") self._add_observed( self._add_holiday_jan_20(name) if self._year >= 1937 else self._add_holiday_mar_4(name), rule=SUN_TO_NEXT_MON, ) if self._year >= 2005: # Emancipation Day. self._add_observed(self._add_holiday_apr_16(tr("Emancipation Day"))) if self._year >= 1971: self._add_holiday_2nd_mon_of_oct( # Indigenous Peoples' Day. tr("Indigenous Peoples' Day") if self._year >= 2019 # Columbus Day. else tr("Columbus Day") ) def _populate_subdiv_de_public_holidays(self): # Good Friday. self._add_good_friday(tr("Good Friday")) if self._year >= 2008 and self._year % 2 == 0: # Election Day. self._add_holiday_1_day_past_1st_mon_of_nov(tr("Election Day")) if self._year >= 1975: # Day After Thanksgiving. self._add_holiday_1_day_past_4th_thu_of_nov(tr("Day After Thanksgiving")) def _populate_subdiv_fl_public_holidays(self): if self._year >= 2011: # Susan B. Anthony Day. self._add_holiday_feb_15(tr("Susan B. Anthony Day")) if self._year >= 1975: # Friday After Thanksgiving. self._add_holiday_1_day_past_4th_thu_of_nov(tr("Friday After Thanksgiving")) def _populate_subdiv_ga_public_holidays(self): if self._year >= 1986: self._add_holiday_3rd_mon_of_jan( # Martin Luther King Jr. Day. tr("Martin Luther King Jr. Day") if self._year >= 2012 # Robert E. Lee's Birthday. else tr("Robert E. Lee's Birthday") ) if self._year >= 1866: name = ( # State Holiday. tr("State Holiday") if self._year >= 2016 # Confederate Memorial Day. else tr("Confederate Memorial Day") ) if self._year == 2020: self._add_holiday_apr_10(name) else: self._add_holiday_4th_mon_of_apr(name) if self._year >= 1986: self._add_holiday_1_day_past_4th_thu_of_nov( # State Holiday. tr("State Holiday") if self._year >= 2016 # Robert E. Lee's Birthday. else tr("Robert E. Lee's Birthday") ) if self._year >= 1879: self._add_holiday( # Washington's Birthday. tr("Washington's Birthday"), self._get_observed_date(self._christmas_day, rule=GA_IN_WASHINGTON_BIRTHDAY), ) def _populate_subdiv_gu_public_holidays(self): if self._year >= 1970: # Guam Discovery Day. self._add_holiday_1st_mon_of_mar(tr("Guam Discovery Day")) # Good Friday. self._add_good_friday(tr("Good Friday")) if self._year >= 1945: # Liberation Day (Guam). self._add_holiday_jul_21(tr("Liberation Day (Guam)")) # All Souls' Day. self._add_all_souls_day(tr("All Souls' Day")) # Lady of Camarin Day. self._add_immaculate_conception_day(tr("Lady of Camarin Day")) def _populate_subdiv_hi_public_holidays(self): if self._year >= 1971: # Presidents' Day. self._add_holiday_3rd_mon_of_feb(tr("Presidents' Day")) if self._year >= 1949: # Prince Jonah Kuhio Kalanianaole Day. self._add_observed(self._add_holiday_mar_26(tr("Prince Jonah Kuhio Kalanianaole Day"))) if self._year >= 1872: # Kamehameha Day. jun_11 = self._add_holiday_jun_11(tr("Kamehameha Day")) if self._year >= 2011: self._add_observed(jun_11) if self._year >= 1959: # Statehood Day. self._add_holiday_3rd_fri_of_aug(tr("Statehood Day")) if self._year >= 2008 and self._year % 2 == 0: # Election Day. self._add_holiday_1_day_past_1st_mon_of_nov(tr("Election Day")) def _populate_subdiv_ia_public_holidays(self): if self._year >= 1971: # Lincoln's Birthday. self._add_observed(self._add_holiday_feb_12(tr("Lincoln's Birthday"))) def _populate_subdiv_id_public_holidays(self): if self._year >= 1986: self._add_holiday_3rd_mon_of_jan( # Martin Luther King Jr. / Idaho Human Rights Day. tr("Martin Luther King Jr. / Idaho Human Rights Day") if self._year >= 2006 # Martin Luther King Jr. Day. else tr("Martin Luther King Jr. Day") ) if self._year >= 1971: # Presidents' Day. self._add_holiday_3rd_mon_of_feb(tr("Presidents' Day")) def _populate_subdiv_il_public_holidays(self): if self._year >= 1971: # Lincoln's Birthday. self._add_observed(self._add_holiday_feb_12(tr("Lincoln's Birthday"))) if self._year >= 1978: # Casimir Pulaski Day. self._add_holiday_1st_mon_of_mar(tr("Casimir Pulaski Day")) if self._year >= 2008 and self._year % 2 == 0: # Election Day. self._add_holiday_1_day_past_1st_mon_of_nov(tr("Election Day")) def _populate_subdiv_in_public_holidays(self): # Good Friday. self._add_good_friday(tr("Good Friday")) if self._year >= 2015 or (self._year >= 2006 and self._year % 2 == 0): # Primary Election Day. self._add_holiday_1_day_past_1st_mon_of_may(tr("Primary Election Day")) if self._year >= 2015 or (self._year >= 2008 and self._year % 2 == 0): # Election Day. self._add_holiday_1_day_past_1st_mon_of_nov(tr("Election Day")) if self._year >= 2010: # Lincoln's Birthday. self._add_holiday_1_day_past_4th_thu_of_nov(tr("Lincoln's Birthday")) if self._year >= 1879: self._add_holiday( # Washington's Birthday. tr("Washington's Birthday"), self._get_observed_date(self._christmas_day, rule=GA_IN_WASHINGTON_BIRTHDAY), ) def _populate_subdiv_ks_public_holidays(self): if self._year >= 2013: # Christmas Eve. self._add_christmas_eve_holiday() def _populate_subdiv_ky_public_holidays(self): # Good Friday. self._add_good_friday(tr("Good Friday")) if self._year >= 2013: # New Year's Eve. self._add_observed(self._add_new_years_eve(tr("New Year's Eve"))) def _populate_subdiv_la_public_holidays(self): if self._year >= 1857: # Mardi Gras. self._add_carnival_tuesday(tr("Mardi Gras")) # Good Friday. self._add_good_friday(tr("Good Friday")) if self._year >= 2008 and self._year % 2 == 0: # Election Day. self._add_holiday_1_day_past_1st_mon_of_nov(tr("Election Day")) def _populate_subdiv_ma_public_holidays(self): if self._year >= 1901: self._add_observed( # Evacuation Day. self._add_holiday_mar_17(tr("Evacuation Day")), rule=SAT_SUN_TO_NEXT_MON, ) if self._year >= 1894: # Patriots' Day. name = tr("Patriots' Day") if self._year >= 1969: self._add_holiday_3rd_mon_of_apr(name) else: self._add_holiday_apr_19(name) def _populate_subdiv_md_public_holidays(self): if self._year >= 1789 and (self._year - 1789) % 4 == 0: # Inauguration Day. name = tr("Inauguration Day") self._add_observed( self._add_holiday_jan_20(name) if self._year >= 1937 else self._add_holiday_mar_4(name), rule=SUN_TO_NEXT_MON, ) if self._year >= 1971: # Presidents' Day. self._add_holiday_3rd_mon_of_feb(tr("Presidents' Day")) if self._year >= 2008: # American Indian Heritage Day. self._add_holiday_1_day_past_4th_thu_of_nov(tr("American Indian Heritage Day")) def _populate_subdiv_me_public_holidays(self): if self._year >= 1894: # Patriots' Day. name = tr("Patriots' Day") if self._year >= 1969: self._add_holiday_3rd_mon_of_apr(tr("Patriots' Day")) else: self._add_holiday_apr_19(name) if self._year >= 1971: self._add_holiday_2nd_mon_of_oct( # Indigenous Peoples' Day. tr("Indigenous Peoples' Day") if self._year >= 2019 # Columbus Day. else tr("Columbus Day") ) def _populate_subdiv_mi_public_holidays(self): if self._year >= 2013: # Christmas Eve. self._add_christmas_eve_holiday() # New Year's Eve. self._add_observed(self._add_new_years_eve(tr("New Year's Eve"))) if self._year >= 2008 and self._year % 2 == 0: # Election Day. self._add_holiday_1_day_past_1st_mon_of_nov(tr("Election Day")) if self._year >= 2017: # Day After Thanksgiving. self._add_holiday_1_day_past_4th_thu_of_nov(tr("Day After Thanksgiving")) def _populate_subdiv_mn_public_holidays(self): if self._year >= 1971: # Washington's and Lincoln's Birthday. self._add_holiday_3rd_mon_of_feb(tr("Washington's and Lincoln's Birthday")) def _populate_subdiv_mo_public_holidays(self): if self._year >= 1949: # Truman Day. self._add_observed(self._add_holiday_may_8(tr("Truman Day"))) def _populate_subdiv_mp_public_holidays(self): # Commonwealth Covenant Day. self._add_observed(self._add_holiday_mar_24(tr("Commonwealth Covenant Day"))) # Good Friday. self._add_good_friday(tr("Good Friday")) # Commonwealth Cultural Day. self._add_holiday_2nd_mon_of_oct(tr("Commonwealth Cultural Day")) if self._year >= 2008 and self._year % 2 == 0: # Election Day. self._add_holiday_1_day_past_1st_mon_of_nov(tr("Election Day")) # Citizenship Day. self._add_observed(self._add_holiday_nov_4(tr("Citizenship Day"))) # Constitution Day. self._add_observed(self._add_holiday_dec_8(tr("Constitution Day"))) def _populate_subdiv_ms_public_holidays(self): if self._year >= 1986: self._add_holiday_3rd_mon_of_jan( # Dr. Martin Luther King Jr. and Robert E. Lee's Birthdays. tr("Dr. Martin Luther King Jr. and Robert E. Lee's Birthdays") ) if self._year >= 1866: # Confederate Memorial Day. self._add_holiday_last_mon_of_apr(tr("Confederate Memorial Day")) def _populate_subdiv_mt_public_holidays(self): if self._year >= 1971: # Lincoln's and Washington's Birthdays. self._add_holiday_3rd_mon_of_feb(tr("Lincoln's and Washington's Birthdays")) if self._year >= 2008 and self._year % 2 == 0: # Election Day. self._add_holiday_1_day_past_1st_mon_of_nov(tr("Election Day")) def _populate_subdiv_nc_public_holidays(self): # Good Friday. self._add_good_friday(tr("Good Friday")) if self._year >= 1975: # Day After Thanksgiving. self._add_holiday_1_day_past_4th_thu_of_nov(tr("Day After Thanksgiving")) if self._year >= 2013: # Christmas Eve. self._add_christmas_eve_holiday() # If on Saturday or Sunday, observed on Monday # If on Monday, observed on Tuesday if self._year >= 2013: # Day After Christmas. name = tr("Day After Christmas") self._add_observed( self._add_christmas_day_two(name), name=name, rule=MON_TO_NEXT_TUE + SAT_SUN_TO_NEXT_MON, ) def _populate_subdiv_nd_public_holidays(self): pass def _populate_subdiv_ne_public_holidays(self): if self._year >= 1875: # Arbor Day. name = tr("Arbor Day") if self._year >= 1989: self._add_holiday_last_fri_of_apr(name) else: self._add_holiday_apr_22(name) if self._year >= 1971: self._add_holiday_2nd_mon_of_oct( # Indigenous Peoples' Day. tr("Indigenous Peoples' Day") if self._year >= 2020 # Columbus Day. else tr("Columbus Day") ) def _populate_subdiv_nh_public_holidays(self): if self._year >= 1986: # Dr. Martin Luther King Jr. / Civil Rights Day. self._add_holiday_3rd_mon_of_jan(tr("Dr. Martin Luther King Jr. / Civil Rights Day")) if self._year >= 2008 and self._year % 2 == 0: # Election Day. self._add_holiday_1_day_past_1st_mon_of_nov(tr("Election Day")) if self._year >= 1975: # Day After Thanksgiving. self._add_holiday_1_day_past_4th_thu_of_nov(tr("Day After Thanksgiving")) def _populate_subdiv_nj_public_holidays(self): if self._year >= 1971: # Lincoln's Birthday. self._add_observed(self._add_holiday_feb_12(tr("Lincoln's Birthday"))) # Presidents Day. self._add_holiday_3rd_mon_of_feb(tr("Presidents Day")) # Good Friday. self._add_good_friday(tr("Good Friday")) if self._year >= 2008 and self._year % 2 == 0: # Election Day. self._add_holiday_1_day_past_1st_mon_of_nov(tr("Election Day")) def _populate_subdiv_nm_public_holidays(self): if self._year >= 1971: self._add_holiday_2nd_mon_of_oct( # Indigenous Peoples' Day. tr("Indigenous Peoples' Day") if self._year >= 2019 # Columbus Day. else tr("Columbus Day") ) # Presidents' Day. self._add_holiday_1_day_past_4th_thu_of_nov(tr("Presidents' Day")) def _populate_subdiv_nv_public_holidays(self): if self._year >= 1933: # Nevada Day. name = tr("Nevada Day") self._add_observed( self._add_holiday_last_fri_of_oct(name) if self._year >= 2000 else self._add_holiday_oct_31(name) ) # Family Day. self._add_holiday_1_day_past_4th_thu_of_nov(tr("Family Day")) def _populate_subdiv_ny_public_holidays(self): if self._year >= 1971: # Lincoln's Birthday. self._add_observed(self._add_holiday_feb_12(tr("Lincoln's Birthday"))) if self._year >= 2004: # Susan B. Anthony Day. self._add_holiday_feb_15(tr("Susan B. Anthony Day")) if self._year >= 2015 or (self._year >= 2008 and self._year % 2 == 0): # Election Day. self._add_holiday_1_day_past_1st_mon_of_nov(tr("Election Day")) def _populate_subdiv_oh_public_holidays(self): if self._year >= 1971: # Washington-Lincoln Day. self._add_holiday_3rd_mon_of_feb(tr("Washington-Lincoln Day")) def _populate_subdiv_ok_public_holidays(self): if self._year >= 1971: # Presidents' Day. self._add_holiday_3rd_mon_of_feb(tr("Presidents' Day")) if self._year >= 1975: # Day After Thanksgiving. self._add_holiday_1_day_past_4th_thu_of_nov(tr("Day After Thanksgiving")) def _populate_subdiv_or_public_holidays(self): if self._year >= 1971: # Presidents Day. self._add_holiday_3rd_mon_of_feb(tr("Presidents Day")) def _populate_subdiv_pa_public_holidays(self): if self._year >= 1971: # Presidents' Day. self._add_holiday_3rd_mon_of_feb(tr("Presidents' Day")) # Day After Thanksgiving. self._add_holiday_1_day_past_4th_thu_of_nov(tr("Day After Thanksgiving")) def _populate_subdiv_pr_public_holidays(self): # Epiphany. self._add_epiphany_day(tr("Epiphany")) if self._year >= 1971: # Presidents' Day. self._add_holiday_3rd_mon_of_feb(tr("Presidents' Day")) # Emancipation Day. self._add_observed(self._add_holiday_mar_22(tr("Emancipation Day")), rule=SUN_TO_NEXT_MON) # Good Friday. self._add_good_friday(tr("Good Friday")) # Constitution Day. self._add_observed(self._add_holiday_jul_25(tr("Constitution Day")), rule=SUN_TO_NEXT_MON) # Discovery Day. self._add_observed(self._add_holiday_nov_19(tr("Discovery Day")), rule=SUN_TO_NEXT_MON) def _populate_subdiv_ri_public_holidays(self): if self._year >= 1948: # Victory Day. self._add_holiday_2nd_mon_of_aug(tr("Victory Day")) if self._year >= 1971: self._add_holiday_2nd_mon_of_oct( # Indigenous Peoples' Day / Columbus Day. tr("Indigenous Peoples' Day / Columbus Day") if self._year >= 2022 # Columbus Day. else tr("Columbus Day") ) def _populate_subdiv_sc_public_holidays(self): if self._year >= 1971: # President's Day. self._add_holiday_3rd_mon_of_feb(tr("President's Day")) if self._year >= 1866: # Confederate Memorial Day. self._add_holiday_4th_mon_of_apr(tr("Confederate Memorial Day")) def _populate_subdiv_sd_public_holidays(self): if self._year >= 1937: name = ( # Native Americans' Day. tr("Native Americans' Day") if self._year >= 1990 # Columbus Day. else tr("Columbus Day") ) if self._year >= 1970: self._add_holiday_2nd_mon_of_oct(name) else: self._add_columbus_day(name) def _populate_subdiv_tn_public_holidays(self): if self._year >= 1971: # President's Day. self._add_holiday_3rd_mon_of_feb(tr("President's Day")) # Good Friday. self._add_good_friday(tr("Good Friday")) def _populate_subdiv_tx_public_holidays(self): if self._year >= 1931: # Confederate Memorial Day. self._add_holiday_jan_19(tr("Confederate Memorial Day")) if self._year >= 1971: # Presidents' Day. self._add_holiday_3rd_mon_of_feb(tr("Presidents' Day")) if self._year >= 1874: # Texas Independence Day. self._add_holiday_mar_2(tr("Texas Independence Day")) if self._year >= 2000: # Cesar Chavez Day. self._add_holiday_mar_31(tr("Cesar Chavez Day")) # Good Friday. self._add_good_friday(tr("Good Friday")) if self._year >= 1875: # San Jacinto Day. self._add_holiday_apr_21(tr("San Jacinto Day")) if self._year >= 1980: # Emancipation Day In Texas. self._add_holiday_jun_19(tr("Emancipation Day In Texas")) if self._year >= 1973: # Lyndon Baines Johnson Day. self._add_holiday_aug_27(tr("Lyndon Baines Johnson Day")) if self._year >= 1975: # Friday After Thanksgiving. self._add_holiday_1_day_past_4th_thu_of_nov(tr("Friday After Thanksgiving")) if self._year >= 1981: # Christmas Eve. self._add_christmas_eve_holiday() # Day After Christmas. self._add_christmas_day_two(tr("Day After Christmas")) def _populate_subdiv_um_public_holidays(self): pass def _populate_subdiv_ut_public_holidays(self): if self._year >= 1971: # Washington and Lincoln Day. self._add_holiday_3rd_mon_of_feb(tr("Washington and Lincoln Day")) if self._year >= 1849: # Pioneer Day. self._add_observed(self._add_holiday_jul_24(tr("Pioneer Day"))) def _populate_subdiv_va_public_holidays(self): if 1889 <= self._year <= 2020: # Lee Jackson Day. name = tr("Lee Jackson Day") if self._year >= 2000: self._add_holiday_3_days_prior_3rd_mon_of_jan(name) elif self._year >= 1983: self._add_holiday_3rd_mon_of_jan(name) else: self._add_holiday_jan_19(name) if self._year >= 1789 and (self._year - 1789) % 4 == 0: # Inauguration Day. name = tr("Inauguration Day") self._add_observed( self._add_holiday_jan_20(name) if self._year >= 1937 else self._add_holiday_mar_4(name), rule=SUN_TO_NEXT_MON, ) if self._year >= 1971: # George Washington Day. self._add_holiday_3rd_mon_of_feb(tr("George Washington Day")) self._add_holiday_2nd_mon_of_oct( # Indigenous Peoples' Day. tr("Indigenous Peoples' Day") if self._year >= 2020 # Columbus Day. else tr("Columbus Day") ) def _populate_subdiv_vi_public_holidays(self): # Three Kings Day. self._add_epiphany_day(tr("Three Kings Day")) if self._year >= 1879: # Presidents' Day. name = tr("Presidents' Day") if self._year >= 1971: self._add_holiday_3rd_mon_of_feb(name) else: self._add_holiday_feb_22(name) # Transfer Day. self._add_holiday_mar_31(tr("Transfer Day")) # Holy Thursday. self._add_holy_thursday(tr("Holy Thursday")) # Good Friday. self._add_good_friday(tr("Good Friday")) # Easter Monday. self._add_easter_monday(tr("Easter Monday")) # Emancipation Day. self._add_holiday_jul_3(tr("Emancipation Day")) if self._year >= 1937: # Columbus Day and Puerto Rico Friendship Day. name = tr("Columbus Day and Puerto Rico Friendship Day") if self._year >= 1970: self._add_holiday_2nd_mon_of_oct(name) else: self._add_columbus_day(name) # Liberty Day. self._add_holiday_nov_1(tr("Liberty Day")) # Christmas Second Day. self._add_christmas_day_two(tr("Christmas Second Day")) def _populate_subdiv_vt_public_holidays(self): if self._year >= 1971: # Presidents' Day. self._add_holiday_3rd_mon_of_feb(tr("Presidents' Day")) if self._year >= 1800: # Town Meeting Day. self._add_holiday_1st_tue_of_mar(tr("Town Meeting Day")) if self._year >= 1778: # Bennington Battle Day. self._add_observed(self._add_holiday_aug_16(tr("Bennington Battle Day"))) def _populate_subdiv_wa_public_holidays(self): if self._year >= 1971: # Presidents' Day. self._add_holiday_3rd_mon_of_feb(tr("Presidents' Day")) def _populate_subdiv_wi_public_holidays(self): if self._year >= 1976: # Susan B. Anthony Day. self._add_holiday_feb_15(tr("Susan B. Anthony Day")) if self._year >= 2012: # Christmas Eve. self._add_christmas_eve_holiday() # New Year's Eve. self._add_observed(self._add_new_years_eve(tr("New Year's Eve"))) def _populate_subdiv_wv_public_holidays(self): if self._year >= 1971: # Presidents' Day. self._add_holiday_3rd_mon_of_feb(tr("Presidents' Day")) if self._year >= 1927: # West Virginia Day. self._add_observed(self._add_holiday_jun_20(tr("West Virginia Day"))) if self._year >= 2008 and self._year % 2 == 0: # Election Day. self._add_holiday_1_day_past_1st_mon_of_nov(tr("Election Day")) if self._year >= 1975: # Day After Thanksgiving. self._add_holiday_1_day_past_4th_thu_of_nov(tr("Day After Thanksgiving")) def _populate_subdiv_wy_public_holidays(self): if self._year >= 1971: # President's Day. self._add_holiday_3rd_mon_of_feb(tr("President's Day")) def _populate_government_holidays(self): # Added by 16 Stat. 168, effectdive date June 28th, 1870. # New Year's Day check for 1871 is included. if self._year >= 1870: # Federal holidays in the United States. self._populate_common(include_federal=True) def _populate_unofficial_holidays(self): # Very common celebrated cultural days, but no official observance. # Due to its nature, no in-lieus are observed. # Valentine's Day. # While the modern iteration of Valentine's Day has started in the UK in 1797, # it wasn't until 1847 in the US that this started to be observed here. if self._year >= 1847: # Valentine's Day. self._add_holiday_feb_14(tr("Valentine's Day")) # Saint Patrick's Day. # Started in Boston in 1737 for the US. # Saint Patrick's Day. self._add_holiday_mar_17(tr("Saint Patrick's Day")) # Halloween. # Halloween began in the US sometime around the 19th century. # Halloween. self._add_holiday_oct_31(tr("Halloween")) # Continental US non-Public dates if self.subdiv not in {"AS", "GU", "MP", "PR", "UM", "VI"}: # Groundhog Day # First observed on Feb 2 in 1886 in Continental US + Hawaii. if self._year >= 1886: # Groundhog Day. self._add_holiday_feb_2(tr("Groundhog Day")) # Election Day # May be duplicates for certain states which has this as their actual public holiday. # The current US Presidential Election date pattern was codified in 1848 nationwide. if self._year >= 1848 and self._year % 4 == 0: # Election Day. self._add_holiday_1_day_past_1st_mon_of_nov(tr("Election Day")) class US(UnitedStates): pass class USA(UnitedStates): pass class UnitedStatesStaticHolidays(StaticHolidays): """United States special holidays. Thanksgiving Proclamation References: * [1777](https://web.archive.org/web/20240621142028/https://pilgrimhall.org/pdf/TG_First_National_Thanksgiving_Proclamation_1777.pdf) * [1782](https://web.archive.org/web/20240621142030/https://www.loc.gov/exhibits/religion/vc006491.jpg) * [1789](https://web.archive.org/web/20240621142029/https://www.whatsoproudlywehail.org/curriculum/the-american-calendar/thanksgiving-proclamation-1789-2) * [1795](https://web.archive.org/web/20240621142029/https://founders.archives.gov/documents/Washington/05-17-02-0239) * [1798](https://web.archive.org/web/20240621142029/https://founders.archives.gov/documents/Adams/99-02-02-2386) * [1799](https://web.archive.org/web/20240621142029/https://founders.archives.gov/documents/Adams/99-02-02-3372) * [1813](https://web.archive.org/web/20240621142030/https://founders.archives.gov/documents/Madison/03-06-02-0434) * [1815](https://web.archive.org/web/20240621142030/https://founders.archives.gov/documents/Madison/03-09-02-0066) Pre-1971 Inauguration Day observances has been moved here. """ # Fasting and Humiliation Day. fasting_and_humiliation_day_name = tr("Fasting and Humiliation Day") # Public Humiliation and Prayer Day. public_humiliation_and_prayer_day_name = tr("Public Humiliation and Prayer Day") # Public Thanksgiving and Prayer Day. public_thanksgiving_and_prayer_day_name = tr("Public Thanksgiving and Prayer Day") # Inauguration Day. inauguration_day_name = tr("Inauguration Day") special_public_holidays = { 1777: (DEC, 18, public_thanksgiving_and_prayer_day_name), 1782: (NOV, 28, public_thanksgiving_and_prayer_day_name), 1789: (NOV, 26, public_thanksgiving_and_prayer_day_name), 1795: (FEB, 19, public_thanksgiving_and_prayer_day_name), 1798: (MAY, 9, fasting_and_humiliation_day_name), 1799: (APR, 25, fasting_and_humiliation_day_name), 1813: (SEP, 9, public_humiliation_and_prayer_day_name), 1815: (APR, 13, public_humiliation_and_prayer_day_name), } # Pre-1953 Inauguration Day observances. special_dc_public_holidays_observed = { 1877: (MAR, 5, inauguration_day_name), 1917: (MAR, 5, inauguration_day_name), } special_md_public_holidays_observed = { 1877: (MAR, 5, inauguration_day_name), 1917: (MAR, 5, inauguration_day_name), } special_va_public_holidays_observed = { 1877: (MAR, 5, inauguration_day_name), 1917: (MAR, 5, inauguration_day_name), }