diff --git a/pandas_market_calendars/calendars/sifma.py b/pandas_market_calendars/calendars/sifma.py index a592d0b..78a4be5 100644 --- a/pandas_market_calendars/calendars/sifma.py +++ b/pandas_market_calendars/calendars/sifma.py @@ -39,6 +39,7 @@ ThursdayBeforeUSIndependenceDay2pmEarlyClose, USLaborDay, USColumbusDay, + USVeteransDay2022, USVeteransDay, USThanksgivingDay, DayAfterThanksgiving2pmEarlyClose, @@ -126,6 +127,7 @@ def regular_holidays(self): USIndependenceDay, USLaborDay, USColumbusDay, + USVeteransDay2022, USVeteransDay, USThanksgivingDay, Christmas, @@ -221,6 +223,7 @@ def regular_holidays(self): UKSummerBank, USLaborDay, USColumbusDay, + USVeteransDay2022, USVeteransDay, USThanksgivingDay, UKChristmas, @@ -324,6 +327,7 @@ def regular_holidays(self): JapanSportsDay2020, JapanHealthAndSportsDay2000To2019, JapanCultureDay, + USVeteransDay2022, USVeteransDay, JapanLaborThanksgivingDay, USThanksgivingDay, diff --git a/pandas_market_calendars/holidays/sifma.py b/pandas_market_calendars/holidays/sifma.py index 4540cf8..42147e9 100644 --- a/pandas_market_calendars/holidays/sifma.py +++ b/pandas_market_calendars/holidays/sifma.py @@ -100,8 +100,10 @@ # 2021 is early close. # 2022 is a full holiday. # 2023 is early close. +# 2024 is a full holiday GoodFridayAdHoc = [ Timestamp("2022-04-15", tz="UTC"), + Timestamp("2024-03-29", tz="UTC"), ] GoodFriday2pmEarlyCloseAdHoc = [ @@ -119,6 +121,7 @@ DayBeforeGoodFriday2pmEarlyCloseAdHoc = [ Timestamp("2022-04-14", tz="UTC"), + Timestamp("2024-03-28", tz="UTC"), ] ################################################## @@ -201,11 +204,20 @@ # When falls on Saturday, no holiday is observed. # When falls on Sunday, the Monday following is a holiday. ########################################################## +USVeteransDay2022 = Holiday( + "Veterans Day Prior to 2023", + month=11, + day=11, + end_date=Timestamp("2022-12-31"), + days_of_week=(MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY), + observance=sunday_to_monday, +) + USVeteransDay = Holiday( "Veterans Day", month=11, day=11, - end_date=Timestamp("2022-12-31"), + start_date=Timestamp("2023-12-31"), days_of_week=(MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY), observance=sunday_to_monday, ) diff --git a/tests/test_sifma_calendars.py b/tests/test_sifma_calendars.py index dd617e7..90d4e7e 100644 --- a/tests/test_sifma_calendars.py +++ b/tests/test_sifma_calendars.py @@ -93,6 +93,46 @@ def test_us_weekmask(): assert sifma_us.weekmask == "Mon Tue Wed Thu Fri" +def test_us_2024(): + start = "2024-01-01" + end = "2024-12-31" + holidays = [ + pd.Timestamp("2024-01-01", tz="UTC"), # New Year's Day + pd.Timestamp("2024-01-15", tz="UTC"), # MLK + pd.Timestamp("2024-02-19", tz="UTC"), # Presidents Day + pd.Timestamp("2024-03-29", tz="UTC"), # Good Friday + pd.Timestamp("2024-05-27", tz="UTC"), # Memorial Day + pd.Timestamp("2024-06-19", tz="UTC"), # Juneteenth + pd.Timestamp("2024-07-04", tz="UTC"), # Independence Day + pd.Timestamp("2024-09-02", tz="UTC"), # Labor Day + pd.Timestamp("2024-10-14", tz="UTC"), # Columbus Day + pd.Timestamp("2024-11-11", tz="UTC"), # Veterans Day + pd.Timestamp("2024-11-28", tz="UTC"), # Thanksgiving + pd.Timestamp("2024-12-25", tz="UTC"), # Christmas + ] + _test_holidays(sifma_us, holidays, start, end) + _test_no_special_opens(sifma_us, start, end) + + # early closes we expect: + early_closes = [ + pd.Timestamp("2024-03-28 2:00PM", tz="America/New_York"), # Good Friday + pd.Timestamp( + "2024-05-24 2:00PM", tz="America/New_York" + ), # Day before Memorial Day + pd.Timestamp( + "2024-07-03 2:00PM", tz="America/New_York" + ), # Day before Independence Day + pd.Timestamp( + "2024-11-29 2:00PM", tz="America/New_York" + ), # Day after Thanksgiving + pd.Timestamp( + "2024-12-24 2:00PM", tz="America/New_York" + ), # Day before Christmas + pd.Timestamp("2024-12-31 2:00PM", tz="America/New_York"), # New Year's Eve + ] + _test_has_early_closes(sifma_us, early_closes, start, end) + + def test_us_2023(): start = "2023-01-01" end = "2023-12-31"