From b7404f77413571332429875d0d39053dc2221b2a Mon Sep 17 00:00:00 2001 From: PyryL Date: Sun, 11 Dec 2022 18:45:33 +0200 Subject: [PATCH] leap year fixes in date properties --- fixedcal/core/date.py | 2 ++ tests/leap_year_test.py | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/fixedcal/core/date.py b/fixedcal/core/date.py index 46efea8..8e8c261 100644 --- a/fixedcal/core/date.py +++ b/fixedcal/core/date.py @@ -79,6 +79,8 @@ class FixedDate: """In range 1...29""" if self.is_leap_day: return 29 + if self.is_leap_year and self.day_of_year > 169: # leap day past this year + return ((self._day_of_year-2) % 28) + 1 return ((self._day_of_year-1) % 28) + 1 @property diff --git a/tests/leap_year_test.py b/tests/leap_year_test.py index 4f570f0..30b86b7 100644 --- a/tests/leap_year_test.py +++ b/tests/leap_year_test.py @@ -34,6 +34,18 @@ class TestLeapYear(unittest.TestCase): self.assertEqual(fixed_date.week_of_year, 24) self.assertEqual(fixed_date.year_quarter, 2) + def test_year_day_of_leap_year(self): + fixed_date = FixedDate(day_of_year=366, year=2024) + self.assertTrue(fixed_date.is_year_day) + self.assertEqual(fixed_date.year, 2024) + self.assertEqual(fixed_date.month, 14) + self.assertEqual(fixed_date.day_of_month, 1) + + def test_ordinary_date_after_leap_day(self): + fixed_date = FixedDate(datetime(2024, 10, 13)) + self.assertEqual(fixed_date.month, 11) + self.assertEqual(fixed_date.day_of_month, 6) + def test_fixed_date_difference_over_gregorian_leap_day(self): # in Gregorian system there are 7 days between,