# 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 typing import Union from holidays.calendars.gregorian import MON, TUE, WED, THU, FRI, SAT, SUN from holidays.constants import GOVERNMENT, PUBLIC, UNOFFICIAL from holidays.groups import ChristianHolidays, InternationalHolidays 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): """United States of America (the) holidays. References: * * [Federal holidays](https://www.opm.gov/policy-data-oversight/pay-leave/federal-holidays/) * Washington's Birthday: * [AK](https://doa.alaska.gov/calendar/) * [AL](https://admincode.legislature.state.al.us/administrative-code/670-X-12-.01) * [AR](https://arkleg.state.ar.us/Home/FTPDocument?path=/ACTS/2001/Public/ACT304.pdf) * [AZ](https://www.azleg.gov/ars/1/00301.htm) * [CA](https://www.sos.ca.gov/state-holidays) * [CO](https://leg.colorado.gov/sites/default/files/images/olls/crs2023-title-24.pdf) * [GA](https://www.gasupreme.us/court-information/holidays-2/) * [HI](https://www.capitol.hawaii.gov/hrscurrent/Vol01_Ch0001-0042F/HRS0008/HRS_0008-0001.htm) * [ID](https://idaho.gov/government/state-holidays/) * IN: * * * [MD](https://msa.maryland.gov/msa/mdmanual/01glance/html/holidayl.html) * [MI](https://www.michigan.gov/som/government/state-holidays) * [MN](https://www.revisor.mn.gov/statutes/cite/645.44) * [MT](https://archive.legmt.gov/bills/mca/title_0010/chapter_0010/part_0020/section_0160/0010-0010-0020-0160.html) * [NJ](https://nj.gov/nj/about/facts/holidays/) * [OH](https://codes.ohio.gov/ohio-revised-code/section-1.14) * [OK](https://oklahoma.gov/omes/divisions/human-capital-management/employee-benefits/leave-holidays/holidays.html) * [OR](https://www.oregonlegislature.gov/bills_laws/ors/ors187.html) * [PA](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://www.scstatehouse.gov/code/t53c005.php) * [TN](https://www.tn.gov/about-tn/state-holidays.html) * [TX](https://www.tsl.texas.gov/ref/abouttx/holidays) * [UT](https://le.utah.gov/xcode/Title63G/Chapter1/63G-1-S301.html) * [VA](https://law.lis.virginia.gov/vacode/title2.2/chapter33/section2.2-3300/) * [VT](https://legislature.vermont.gov/statutes/section/01/007/00371) * [WA](https://app.leg.wa.gov/rcw/default.aspx?cite=1.16.050) * [WV](https://code.wvlegislature.gov/2-2-1/) * [WY](https://ai.wyo.gov/about-us/state-holidays-and-office-closures) * Columbus Day / Indigenous Peoples' Day history: * * * * * * [Frances Xavier Cabrini Day](https://leg.colorado.gov/sites/default/files/2020a_1031_signed.pdf) * Northern Mariana Islands (subdivision MP): * * * American Samoa: * """ country = "US" observed_label = "%s (observed)" 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) kwargs.setdefault("observed_rule", SAT_TO_PREV_FRI + SUN_TO_NEXT_MON) super().__init__(*args, **kwargs) def _populate_common(self, include_federal: bool = False): """ Populates common US holidays. :param include_federal: Whether to include federal-specific holidays. """ # New Year's Day if self._year >= 1871: name = "New Year's Day" self._add_observed(self._add_new_years_day(name)) self._add_observed(self._next_year_new_years_day, name=name) if include_federal: # Birthday of Martin Luther King, Jr. if self._year >= 1986: self._add_holiday_3rd_mon_of_jan("Birthday of Martin Luther King, Jr.") # Washington's Birthday if self._year >= 1879: name = "Washington's Birthday" if self._year >= 1971: self._add_holiday_3rd_mon_of_feb(name) else: self._add_holiday_feb_22(name) # Memorial Day if self._year >= 1971: self._add_holiday_last_mon_of_may("Memorial Day") # Juneteenth Day if self._year >= 2021: self._add_observed(self._add_holiday_jun_19("Juneteenth National Independence Day")) # Independence Day if self._year >= 1871: self._add_observed(self._add_holiday_jul_4("Independence Day")) # Labor Day if self._year >= 1894: self._add_holiday_1st_mon_of_sep("Labor Day") if include_federal: # Columbus Day if self._year >= 1971: self._add_holiday_2nd_mon_of_oct("Columbus Day") # Veterans Day if self._year >= 1938: name = "Veterans Day" if self._year >= 1954 else "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 if self._year >= 1871: self._add_holiday_4th_thu_of_nov("Thanksgiving Day") # Christmas Day if self._year >= 1871: self._add_observed(self._add_christmas_day("Christmas Day")) def _populate_public_holidays(self): self._populate_common() # Memorial Day if 1888 <= self._year <= 1970: self._add_holiday_may_30("Memorial Day") def _add_christmas_eve_holiday(self): # Christmas Eve # If on Friday, observed on Thursday # If on Saturday or Sunday, observed on Friday name = "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 # Martin Luther King Jr. Day if self._year >= 1986 and self.subdiv not in {"AL", "AR", "AZ", "GA", "ID", "MS", "NH"}: self._add_holiday_3rd_mon_of_jan("Martin Luther King Jr. Day") # Washington's Birthday 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", }: name = "Washington's Birthday" if self._year >= 1971: self._add_holiday_3rd_mon_of_feb(name) else: self._add_holiday_feb_22(name) # Columbus Day 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", } ): name = "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): # Washington's Birthday if self._year >= 1971: self._add_holiday_3rd_mon_of_feb("Presidents' Day") # Seward's Day # No observance in 1921: https://chroniclingamerica.loc.gov/lccn/sn86072239/1922-03-29/ed-1/seq-8/ if self._year >= 1918 and self._year != 1921: name = "Seward's Day" if self._year >= 1955: self._add_holiday_last_mon_of_mar(name) else: self._add_holiday_mar_30(name) # Indigenous Peoples' Day if self._year >= 1971: self._add_holiday_2nd_mon_of_oct( "Indigenous Peoples' Day" if self._year >= 2015 else "Columbus Day" ) # Alaska Day # https://web.archive.org/web/20120502232826/http://www.alaskadispatch.com/article/happy-alaska-day-great-land if self._year >= 1917: self._add_observed(self._add_holiday_oct_18("Alaska Day")) def _populate_subdiv_al_public_holidays(self): # Martin Luther King Jr. Day if self._year >= 1986: self._add_holiday_3rd_mon_of_jan("Martin Luther King, Jr & Robert E. Lee's Birthday") # Washington's Birthday if self._year >= 1879: name = "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) # Confederate Memorial Day if self._year >= 1866: self._add_holiday_4th_mon_of_apr("Confederate Memorial Day") # Jefferson Davis Birthday if self._year >= 1890: self._add_holiday_1st_mon_of_jun("Jefferson Davis Birthday") # Columbus Day / American Indian Heritage Day / Fraternal Day if self._year >= 1971: self._add_holiday_2nd_mon_of_oct( "Columbus Day / American Indian Heritage Day / Fraternal Day" if self._year >= 2000 else "Columbus Day / Fraternal Day" ) def _populate_subdiv_ar_public_holidays(self): # Martin Luther King Jr. Day if self._year >= 1986: self._add_holiday_3rd_mon_of_jan( "Martin Luther King Jr. Day" if self._year >= 2018 else "Dr. Martin Luther King Jr. and Robert E. Lee's Birthdays" ) # Washington's Birthday if self._year >= 1879: name = "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): # American Samoa Flag Day if self._year >= 1901: self._add_observed(self._add_holiday_apr_17("American Samoa Flag Day")) # Manu'a Islands Cession Day if self._year >= 1983: self._add_observed(self._add_holiday_jul_16("Manu'a Islands Cession Day")) # White Sunday self._add_holiday_2nd_sun_of_oct("White Sunday") def _populate_subdiv_az_public_holidays(self): # Martin Luther King Jr. Day if self._year >= 1986: self._add_holiday_3rd_mon_of_jan("Dr. Martin Luther King Jr. / Civil Rights Day") # Washington's Birthday if self._year >= 1971: self._add_holiday_3rd_mon_of_feb("Lincoln/Washington Presidents' Day") def _populate_subdiv_ca_public_holidays(self): # Lincoln's Birthday if 1971 <= self._year <= 2009: self._add_observed(self._add_holiday_feb_12("Lincoln's Birthday")) # Washington's Birthday if self._year >= 1971: self._add_holiday_3rd_mon_of_feb("Presidents' Day") # Susan B. Anthony Day if self._year >= 2014: self._add_holiday_feb_15("Susan B. Anthony Day") # Cesar Chavez Day if self._year >= 1995: self._add_observed(self._add_holiday_mar_31("Cesar Chavez Day"), rule=SUN_TO_NEXT_MON) # Columbus Day if 1971 <= self._year <= 2008: self._add_holiday_2nd_mon_of_oct("Columbus Day") # Day After Thanksgiving if self._year >= 1975: self._add_holiday_1_day_past_4th_thu_of_nov("Day After Thanksgiving") def _populate_subdiv_co_public_holidays(self): # Washington's Birthday if self._year >= 1971: self._add_holiday_3rd_mon_of_feb("Washington-Lincoln Day") # Cesar Chavez Day if self._year >= 2001: self._add_holiday_mar_31("Cesar Chavez Day") # Frances Xavier Cabrini Day if self._year >= 2020: self._add_holiday_1st_mon_of_oct("Frances Xavier Cabrini Day") def _populate_subdiv_ct_public_holidays(self): # Lincoln's Birthday if self._year >= 1971: self._add_observed(self._add_holiday_feb_12("Lincoln's Birthday")) # Good Friday self._add_good_friday("Good Friday") def _populate_subdiv_dc_public_holidays(self): # Inauguration Day if self._year >= 1789 and (self._year - 1789) % 4 == 0: name = "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, ) # Emancipation Day if self._year >= 2005: self._add_observed(self._add_holiday_apr_16("Emancipation Day")) # Indigenous Peoples' Day if self._year >= 1971: self._add_holiday_2nd_mon_of_oct( "Indigenous Peoples' Day" if self._year >= 2019 else "Columbus Day" ) def _populate_subdiv_de_public_holidays(self): # Good Friday self._add_good_friday("Good Friday") # Election Day if self._year >= 2008 and self._year % 2 == 0: self._add_holiday_1_day_past_1st_mon_of_nov("Election Day") # Day After Thanksgiving if self._year >= 1975: self._add_holiday_1_day_past_4th_thu_of_nov("Day After Thanksgiving") def _populate_subdiv_fl_public_holidays(self): # Susan B. Anthony Day if self._year >= 2011: self._add_holiday_feb_15("Susan B. Anthony Day") # Friday After Thanksgiving if self._year >= 1975: self._add_holiday_1_day_past_4th_thu_of_nov("Friday After Thanksgiving") def _populate_subdiv_ga_public_holidays(self): # Martin Luther King Jr. Day if self._year >= 1986: self._add_holiday_3rd_mon_of_jan( "Martin Luther King Jr. Day" if self._year >= 2012 else "Robert E. Lee's Birthday" ) # Confederate Memorial Day if self._year >= 1866: name = "State Holiday" if self._year >= 2016 else "Confederate Memorial Day" if self._year == 2020: self._add_holiday_apr_10(name) else: self._add_holiday_4th_mon_of_apr(name) # Robert E. Lee's Birthday if self._year >= 1986: self._add_holiday_1_day_past_4th_thu_of_nov( "State Holiday" if self._year >= 2016 else "Robert E. Lee's Birthday" ) # Washington's Birthday if self._year >= 1879: self._add_holiday( "Washington's Birthday", self._get_observed_date(self._christmas_day, rule=GA_IN_WASHINGTON_BIRTHDAY), ) def _populate_subdiv_gu_public_holidays(self): # Guam Discovery Day if self._year >= 1970: self._add_holiday_1st_mon_of_mar("Guam Discovery Day") # Good Friday self._add_good_friday("Good Friday") # Liberation Day (Guam) if self._year >= 1945: self._add_holiday_jul_21("Liberation Day (Guam)") # All Souls' Day self._add_all_souls_day("All Souls' Day") # Lady of Camarin Day self._add_immaculate_conception_day("Lady of Camarin Day") def _populate_subdiv_hi_public_holidays(self): # Washington's Birthday if self._year >= 1971: self._add_holiday_3rd_mon_of_feb("Presidents' Day") # Prince Jonah Kuhio Kalanianaole Day if self._year >= 1949: self._add_observed(self._add_holiday_mar_26("Prince Jonah Kuhio Kalanianaole Day")) # Kamehameha Day if self._year >= 1872: jun_11 = self._add_holiday_jun_11("Kamehameha Day") if self._year >= 2011: self._add_observed(jun_11) # Statehood Day if self._year >= 1959: self._add_holiday_3rd_fri_of_aug("Statehood Day") # Election Day if self._year >= 2008 and self._year % 2 == 0: self._add_holiday_1_day_past_1st_mon_of_nov("Election Day") def _populate_subdiv_ia_public_holidays(self): # Lincoln's Birthday if self._year >= 1971: self._add_observed(self._add_holiday_feb_12("Lincoln's Birthday")) def _populate_subdiv_id_public_holidays(self): # Martin Luther King Jr. Day if self._year >= 1986: self._add_holiday_3rd_mon_of_jan( "Martin Luther King Jr. / Idaho Human Rights Day" if self._year >= 2006 else "Martin Luther King Jr. Day" ) # Washington's Birthday if self._year >= 1971: self._add_holiday_3rd_mon_of_feb("Presidents' Day") def _populate_subdiv_il_public_holidays(self): # Lincoln's Birthday if self._year >= 1971: self._add_observed(self._add_holiday_feb_12("Lincoln's Birthday")) # Casimir Pulaski Day if self._year >= 1978: self._add_holiday_1st_mon_of_mar("Casimir Pulaski Day") # Election Day if self._year >= 2008 and self._year % 2 == 0: self._add_holiday_1_day_past_1st_mon_of_nov("Election Day") def _populate_subdiv_in_public_holidays(self): # Good Friday self._add_good_friday("Good Friday") # Primary Election Day if self._year >= 2015 or (self._year >= 2006 and self._year % 2 == 0): self._add_holiday_1_day_past_1st_mon_of_may("Primary Election Day") # Election Day if self._year >= 2015 or (self._year >= 2008 and self._year % 2 == 0): self._add_holiday_1_day_past_1st_mon_of_nov("Election Day") # Lincoln's Birthday if self._year >= 2010: self._add_holiday_1_day_past_4th_thu_of_nov("Lincoln's Birthday") # Washington's Birthday if self._year >= 1879: self._add_holiday( "Washington's Birthday", self._get_observed_date(self._christmas_day, rule=GA_IN_WASHINGTON_BIRTHDAY), ) def _populate_subdiv_ks_public_holidays(self): # Christmas Eve if self._year >= 2013: self._add_christmas_eve_holiday() def _populate_subdiv_ky_public_holidays(self): # Good Friday self._add_good_friday("Good Friday") # New Year's Eve if self._year >= 2013: self._add_observed(self._add_new_years_eve("New Year's Eve")) def _populate_subdiv_la_public_holidays(self): # Inauguration Day if self._year >= 1789 and (self._year - 1789) % 4 == 0: name = "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, ) # Mardi Gras if self._year >= 1857: self._add_carnival_tuesday("Mardi Gras") # Good Friday self._add_good_friday("Good Friday") # Election Day if self._year >= 2008 and self._year % 2 == 0: self._add_holiday_1_day_past_1st_mon_of_nov("Election Day") def _populate_subdiv_ma_public_holidays(self): # Evacuation Day if self._year >= 1901: self._add_observed( self._add_holiday_mar_17("Evacuation Day"), rule=SAT_SUN_TO_NEXT_MON ) # Patriots' Day if self._year >= 1894: name = "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 = "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, ) # Washington's Birthday if self._year >= 1971: self._add_holiday_3rd_mon_of_feb("Presidents' Day") # American Indian Heritage Day if self._year >= 2008: self._add_holiday_1_day_past_4th_thu_of_nov("American Indian Heritage Day") def _populate_subdiv_me_public_holidays(self): # Patriots' Day if self._year >= 1894: name = "Patriots' Day" if self._year >= 1969: self._add_holiday_3rd_mon_of_apr("Patriots' Day") else: self._add_holiday_apr_19(name) # Indigenous Peoples' Day if self._year >= 1971: self._add_holiday_2nd_mon_of_oct( "Indigenous Peoples' Day" if self._year >= 2019 else "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("New Year's Eve")) # Election Day if self._year >= 2008 and self._year % 2 == 0: self._add_holiday_1_day_past_1st_mon_of_nov("Election Day") # Day after Thanksgiving if self._year >= 2017: self._add_holiday_1_day_past_4th_thu_of_nov("Day After Thanksgiving") def _populate_subdiv_mn_public_holidays(self): # Washington's Birthday if self._year >= 1971: self._add_holiday_3rd_mon_of_feb("Washington's and Lincoln's Birthday") def _populate_subdiv_mo_public_holidays(self): # Truman Day if self._year >= 1949: self._add_observed(self._add_holiday_may_8("Truman Day")) def _populate_subdiv_mp_public_holidays(self): # Commonwealth Covenant Day in Northern Mariana Islands self._add_observed(self._add_holiday_mar_24("Commonwealth Covenant Day")) # Good Friday self._add_good_friday("Good Friday") # Commonwealth Cultural Day in Northern Mariana Islands self._add_holiday_2nd_mon_of_oct("Commonwealth Cultural Day") # Election Day if self._year >= 2008 and self._year % 2 == 0: self._add_holiday_1_day_past_1st_mon_of_nov("Election Day") # Citizenship Day in Northern Mariana Islands self._add_observed(self._add_holiday_nov_4("Citizenship Day")) # Constitution Day in Northern Mariana Islands self._add_observed(self._add_holiday_dec_8("Constitution Day")) def _populate_subdiv_ms_public_holidays(self): # Martin Luther King Jr. Day if self._year >= 1986: self._add_holiday_3rd_mon_of_jan( "Dr. Martin Luther King Jr. and Robert E. Lee's Birthdays" ) # Confederate Memorial Day if self._year >= 1866: self._add_holiday_last_mon_of_apr("Confederate Memorial Day") def _populate_subdiv_mt_public_holidays(self): # Washington's Birthday if self._year >= 1971: self._add_holiday_3rd_mon_of_feb("Lincoln's and Washington's Birthdays") # Election Day if self._year >= 2008 and self._year % 2 == 0: self._add_holiday_1_day_past_1st_mon_of_nov("Election Day") def _populate_subdiv_nc_public_holidays(self): # Good Friday self._add_good_friday("Good Friday") # Day After Thanksgiving if self._year >= 1975: self._add_holiday_1_day_past_4th_thu_of_nov("Day After Thanksgiving") # Christmas Eve if self._year >= 2013: self._add_christmas_eve_holiday() # Day After Christmas if self._year >= 2013: # If on Saturday or Sunday, observed on Monday # If on Monday, observed on Tuesday name = "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): # Arbor Day if self._year >= 1875: name = "Arbor Day" if self._year >= 1989: self._add_holiday_last_fri_of_apr(name) else: self._add_holiday_apr_22(name) # Indigenous Peoples' Day if self._year >= 1971: self._add_holiday_2nd_mon_of_oct( "Indigenous Peoples' Day" if self._year >= 2020 else "Columbus Day" ) def _populate_subdiv_nh_public_holidays(self): # Martin Luther King Jr. Day if self._year >= 1986: self._add_holiday_3rd_mon_of_jan("Dr. Martin Luther King Jr. / Civil Rights Day") # Election Day if self._year >= 2008 and self._year % 2 == 0: self._add_holiday_1_day_past_1st_mon_of_nov("Election Day") # Day After Thanksgiving if self._year >= 1975: self._add_holiday_1_day_past_4th_thu_of_nov("Day After Thanksgiving") def _populate_subdiv_nj_public_holidays(self): # Lincoln's Birthday if self._year >= 1971: self._add_observed(self._add_holiday_feb_12("Lincoln's Birthday")) # Washington's Birthday if self._year >= 1971: self._add_holiday_3rd_mon_of_feb("Presidents Day") # Good Friday self._add_good_friday("Good Friday") # Election Day if self._year >= 2008 and self._year % 2 == 0: self._add_holiday_1_day_past_1st_mon_of_nov("Election Day") def _populate_subdiv_nm_public_holidays(self): # Indigenous Peoples' Day if self._year >= 1971: self._add_holiday_2nd_mon_of_oct( "Indigenous Peoples' Day" if self._year >= 2019 else "Columbus Day" ) # Presidents' Day self._add_holiday_1_day_past_4th_thu_of_nov("Presidents' Day") def _populate_subdiv_nv_public_holidays(self): # Nevada Day if self._year >= 1933: name = "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("Family Day") def _populate_subdiv_ny_public_holidays(self): # Lincoln's Birthday if self._year >= 1971: self._add_observed(self._add_holiday_feb_12("Lincoln's Birthday")) # Susan B. Anthony Day if self._year >= 2004: self._add_holiday_feb_15("Susan B. Anthony Day") # Election Day if self._year >= 2015 or (self._year >= 2008 and self._year % 2 == 0): self._add_holiday_1_day_past_1st_mon_of_nov("Election Day") def _populate_subdiv_oh_public_holidays(self): # Washington's Birthday if self._year >= 1971: self._add_holiday_3rd_mon_of_feb("Washington-Lincoln Day") def _populate_subdiv_ok_public_holidays(self): # Washington's Birthday if self._year >= 1971: self._add_holiday_3rd_mon_of_feb("Presidents' Day") # Day After Thanksgiving if self._year >= 1975: self._add_holiday_1_day_past_4th_thu_of_nov("Day After Thanksgiving") def _populate_subdiv_or_public_holidays(self): # Washington's Birthday if self._year >= 1971: self._add_holiday_3rd_mon_of_feb("Presidents Day") def _populate_subdiv_pa_public_holidays(self): # Washington's Birthday if self._year >= 1971: self._add_holiday_3rd_mon_of_feb("Presidents' Day") # Day After Thanksgiving self._add_holiday_1_day_past_4th_thu_of_nov("Day After Thanksgiving") def _populate_subdiv_pr_public_holidays(self): # Epiphany self._add_epiphany_day("Epiphany") # Washington's Birthday if self._year >= 1971: self._add_holiday_3rd_mon_of_feb("Presidents' Day") # Emancipation Day self._add_observed(self._add_holiday_mar_22("Emancipation Day"), rule=SUN_TO_NEXT_MON) # Good Friday self._add_good_friday("Good Friday") # Constitution Day self._add_observed(self._add_holiday_jul_25("Constitution Day"), rule=SUN_TO_NEXT_MON) # Discovery Day self._add_observed(self._add_holiday_nov_19("Discovery Day"), rule=SUN_TO_NEXT_MON) def _populate_subdiv_ri_public_holidays(self): # Victory Day if self._year >= 1948: self._add_holiday_2nd_mon_of_aug("Victory Day") # Indigenous Peoples' Day if self._year >= 1971: self._add_holiday_2nd_mon_of_oct( "Indigenous Peoples' Day / Columbus Day" if self._year >= 2022 else "Columbus Day" ) def _populate_subdiv_sc_public_holidays(self): # Washington's Birthday if self._year >= 1971: self._add_holiday_3rd_mon_of_feb("President's Day") # Confederate Memorial Day if self._year >= 1866: self._add_holiday_4th_mon_of_apr("Confederate Memorial Day") def _populate_subdiv_sd_public_holidays(self): # Native Americans' Day / Columbus Day if self._year >= 1937: name = "Native Americans' Day" if self._year >= 1990 else "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): # Washington's Birthday if self._year >= 1971: self._add_holiday_3rd_mon_of_feb("President's Day") # Good Friday self._add_good_friday("Good Friday") def _populate_subdiv_tx_public_holidays(self): # Confederate Memorial Day if self._year >= 1931: self._add_holiday_jan_19("Confederate Memorial Day") # Washington's Birthday if self._year >= 1971: self._add_holiday_3rd_mon_of_feb("Presidents' Day") # Texas Independence Day if self._year >= 1874: self._add_holiday_mar_2("Texas Independence Day") # Cesar Chavez Day if self._year >= 2000: self._add_holiday_mar_31("Cesar Chavez Day") # Good Friday self._add_good_friday("Good Friday") # San Jacinto Day if self._year >= 1875: self._add_holiday_apr_21("San Jacinto Day") # Emancipation Day In Texas if self._year >= 1980: self._add_holiday_jun_19("Emancipation Day In Texas") # Lyndon Baines Johnson Day if self._year >= 1973: self._add_holiday_aug_27("Lyndon Baines Johnson Day") # Friday After Thanksgiving if self._year >= 1975: self._add_holiday_1_day_past_4th_thu_of_nov("Friday After Thanksgiving") # Christmas Eve if self._year >= 1981: self._add_christmas_eve_holiday() # Day After Christmas if self._year >= 1981: self._add_christmas_day_two("Day After Christmas") def _populate_subdiv_um_public_holidays(self): pass def _populate_subdiv_ut_public_holidays(self): # Washington's Birthday if self._year >= 1971: self._add_holiday_3rd_mon_of_feb("Washington and Lincoln Day") # Pioneer Day if self._year >= 1849: self._add_observed(self._add_holiday_jul_24("Pioneer Day")) def _populate_subdiv_va_public_holidays(self): # Lee Jackson Day if 1889 <= self._year <= 2020: name = "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) # Inauguration Day if self._year >= 1789 and (self._year - 1789) % 4 == 0: name = "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, ) # Washington's Birthday if self._year >= 1971: self._add_holiday_3rd_mon_of_feb("George Washington Day") # Indigenous Peoples' Day if self._year >= 1971: self._add_holiday_2nd_mon_of_oct( "Indigenous Peoples' Day" if self._year >= 2020 else "Columbus Day" ) def _populate_subdiv_vi_public_holidays(self): # Three Kings Day self._add_epiphany_day("Three Kings Day") # Washington's Birthday if self._year >= 1879: name = "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("Transfer Day") # Holy Thursday self._add_holy_thursday("Holy Thursday") # Good Friday self._add_good_friday("Good Friday") # Easter Monday self._add_easter_monday("Easter Monday") # Emancipation Day in US Virgin Islands self._add_holiday_jul_3("Emancipation Day") # Columbus Day if self._year >= 1937: name = "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("Liberty Day") # Christmas Second Day self._add_christmas_day_two("Christmas Second Day") def _populate_subdiv_vt_public_holidays(self): # Washington's Birthday if self._year >= 1971: self._add_holiday_3rd_mon_of_feb("Presidents' Day") # Town Meeting Day if self._year >= 1800: self._add_holiday_1st_tue_of_mar("Town Meeting Day") # Bennington Battle Day if self._year >= 1778: self._add_observed(self._add_holiday_aug_16("Bennington Battle Day")) def _populate_subdiv_wa_public_holidays(self): # Washington's Birthday if self._year >= 1971: self._add_holiday_3rd_mon_of_feb("Presidents' Day") def _populate_subdiv_wi_public_holidays(self): # Susan B. Anthony Day if self._year >= 1976: self._add_holiday_feb_15("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("New Year's Eve")) def _populate_subdiv_wv_public_holidays(self): # Washington's Birthday if self._year >= 1971: self._add_holiday_3rd_mon_of_feb("Presidents' Day") # West Virginia Day if self._year >= 1927: self._add_observed(self._add_holiday_jun_20("West Virginia Day")) # Election Day if self._year >= 2008 and self._year % 2 == 0: self._add_holiday_1_day_past_1st_mon_of_nov("Election Day") # Day After Thanksgiving if self._year >= 1975: self._add_holiday_1_day_past_4th_thu_of_nov("Day After Thanksgiving") def _populate_subdiv_wy_public_holidays(self): # Washington's Birthday if self._year >= 1971: self._add_holiday_3rd_mon_of_feb("President's Day") def _populate_government_holidays(self): # 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: self._add_holiday_feb_14("Valentine's Day") # Saint Patrick's Day # Started in Boston in 1737 for the US. self._add_holiday_mar_17("Saint Patrick's Day") # Halloween # Halloween began in the US sometime around the 19th century. self._add_holiday_oct_31("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: self._add_holiday_feb_2("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: self._add_holiday_1_day_past_1st_mon_of_nov("Election Day") class US(UnitedStates): pass class USA(UnitedStates): pass