leap day properties fix

This commit is contained in:
PyryL 2022-12-11 18:36:53 +02:00
parent 3f225c5d6e
commit f33ffd659b
2 changed files with 31 additions and 0 deletions

View File

@ -52,6 +52,15 @@ class FixedDate:
# return self._year % 4 == 0
return is_leap_year(self._year)
@property
def is_leap_day(self) -> bool:
"""Whether this fixed date is a leap day (June 29th in fixed) of IFC system.
Returns:
bool: Whether this is a leap day
"""
return self.is_leap_year and self._day_of_year == 169
@property
def datetime(self) -> datetime:
"""Construct a native datetime object from fixed date.
@ -68,11 +77,15 @@ class FixedDate:
@property
def day_of_month(self):
"""In range 1...29"""
if self.is_leap_day:
return 29
return ((self._day_of_year-1) % 28) + 1
@property
def month(self):
"""In range 1...13"""
if self.is_leap_day:
return 6
return ((self._day_of_year-1) // 28) + 1
@property
@ -93,6 +106,8 @@ class FixedDate:
"""
if self.is_year_day:
return 1
if self.is_leap_day:
return 4
return ((self.day_of_month-1) // 7) + 1
@property
@ -102,6 +117,8 @@ class FixedDate:
Returns:
int: 1 for Sunday, 2 for Monday, 7 for Saturday
"""
if self.is_leap_day:
return None
return ((self.day_of_month-1) % 7) + 1
@property
@ -111,6 +128,8 @@ class FixedDate:
Returns:
int: In range 1...53
"""
if self.is_leap_day:
return 24
return ((self._day_of_year-1) // 7) + 1
@property

View File

@ -23,6 +23,18 @@ class TestLeapYear(unittest.TestCase):
fixed_date = FixedDate(datetime(2000, 5, 4))
self.assertTrue(fixed_date.is_leap_year)
def test_fixed_leap_day_properties(self):
# June 17th is the leap day of fixed calendar system
fixed_date = FixedDate(datetime(2024, 6, 17))
self.assertEqual(fixed_date.day_of_month, 29)
self.assertEqual(fixed_date.month, 6)
self.assertIsNone(fixed_date.weekday)
self.assertEqual(fixed_date.week_of_month, 4)
self.assertEqual(fixed_date.week_of_year, 24)
self.assertEqual(fixed_date.year_quarter, 2)
def test_fixed_date_difference_over_gregorian_leap_day(self):
# in Gregorian system there are 7 days between,
# but in IFC the leap day is at the end of June