From f7625f811d822d285fa0bd458f1463aad1f04b4d Mon Sep 17 00:00:00 2001 From: wavebyrd <160968744+wavebyrd@users.noreply.github.com> Date: Sat, 17 Oct 2026 09:11:56 +0000 Subject: [PATCH] Observe New Year's Day on 3 January in the New Zealand calendar when 1 January is a Sunday --- financepy/utils/calendar.py | 4 ++++ .../regression/golden/TestFinCalendar_GOLDEN.testLog | 1 + tests/unit/test_FinCalendar.py | 11 +++++++++++ 3 files changed, 16 insertions(+) diff --git a/financepy/utils/calendar.py b/financepy/utils/calendar.py index ab200891..4ad58550 100644 --- a/financepy/utils/calendar.py +++ b/financepy/utils/calendar.py @@ -1857,6 +1857,10 @@ def holiday_new_zealand(self, dt: Date, day_in_year: int, weekday: int): if m == 1 and d == 3 and weekday == Date.MON: return True + # Jan 1 Sunday -> Jan 3 Tuesday (Jan 2 is the Monday holiday) + if m == 1 and d == 3 and weekday == Date.TUE: + return True + if m == 1 and d == 4 and weekday in (Date.MON, Date.TUE): return True diff --git a/tests/regression/golden/TestFinCalendar_GOLDEN.testLog b/tests/regression/golden/TestFinCalendar_GOLDEN.testLog index 6cfebee5..a843a301 100644 --- a/tests/regression/golden/TestFinCalendar_GOLDEN.testLog +++ b/tests/regression/golden/TestFinCalendar_GOLDEN.testLog @@ -1933,6 +1933,7 @@ RESULTS,NEW_ZEALAND,TUE DEC 27 2022, BANNER,================================ RESULTS,NEW_ZEALAND,SUN JAN 01 2023, RESULTS,NEW_ZEALAND,MON JAN 02 2023, +RESULTS,NEW_ZEALAND,TUE JAN 03 2023, RESULTS,NEW_ZEALAND,MON FEB 06 2023, RESULTS,NEW_ZEALAND,FRI APR 07 2023, RESULTS,NEW_ZEALAND,MON APR 10 2023, diff --git a/tests/unit/test_FinCalendar.py b/tests/unit/test_FinCalendar.py index 85633661..355c92a6 100644 --- a/tests/unit/test_FinCalendar.py +++ b/tests/unit/test_FinCalendar.py @@ -214,6 +214,17 @@ def test_uk_moved_bank_holidays(cal_type): assert cal.is_holiday(dt), dt +def test_nz_new_year_on_sunday_observed_on_tuesday(): + cal = Calendar(CalendarTypes.NEW_ZEALAND) + + # 1 January falls on a Sunday, so 2 January (Monday) is the day after + # New Year's Day and New Year's Day itself is observed on 3 January + for y in [2006, 2012, 2017, 2023]: + assert cal.is_holiday(Date(2, 1, y)), y + assert cal.is_holiday(Date(3, 1, y)), y + assert cal.is_business_day(Date(4, 1, y)), y + + def test_modified_following_does_not_cross_month(): cal = Calendar(CalendarTypes.WEEKEND)