leap day properties fix
This commit is contained in:
parent
3f225c5d6e
commit
f33ffd659b
@ -52,6 +52,15 @@ class FixedDate:
|
|||||||
# return self._year % 4 == 0
|
# return self._year % 4 == 0
|
||||||
return is_leap_year(self._year)
|
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
|
@property
|
||||||
def datetime(self) -> datetime:
|
def datetime(self) -> datetime:
|
||||||
"""Construct a native datetime object from fixed date.
|
"""Construct a native datetime object from fixed date.
|
||||||
@ -68,11 +77,15 @@ class FixedDate:
|
|||||||
@property
|
@property
|
||||||
def day_of_month(self):
|
def day_of_month(self):
|
||||||
"""In range 1...29"""
|
"""In range 1...29"""
|
||||||
|
if self.is_leap_day:
|
||||||
|
return 29
|
||||||
return ((self._day_of_year-1) % 28) + 1
|
return ((self._day_of_year-1) % 28) + 1
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def month(self):
|
def month(self):
|
||||||
"""In range 1...13"""
|
"""In range 1...13"""
|
||||||
|
if self.is_leap_day:
|
||||||
|
return 6
|
||||||
return ((self._day_of_year-1) // 28) + 1
|
return ((self._day_of_year-1) // 28) + 1
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -93,6 +106,8 @@ class FixedDate:
|
|||||||
"""
|
"""
|
||||||
if self.is_year_day:
|
if self.is_year_day:
|
||||||
return 1
|
return 1
|
||||||
|
if self.is_leap_day:
|
||||||
|
return 4
|
||||||
return ((self.day_of_month-1) // 7) + 1
|
return ((self.day_of_month-1) // 7) + 1
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -102,6 +117,8 @@ class FixedDate:
|
|||||||
Returns:
|
Returns:
|
||||||
int: 1 for Sunday, 2 for Monday, 7 for Saturday
|
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
|
return ((self.day_of_month-1) % 7) + 1
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -111,6 +128,8 @@ class FixedDate:
|
|||||||
Returns:
|
Returns:
|
||||||
int: In range 1...53
|
int: In range 1...53
|
||||||
"""
|
"""
|
||||||
|
if self.is_leap_day:
|
||||||
|
return 24
|
||||||
return ((self._day_of_year-1) // 7) + 1
|
return ((self._day_of_year-1) // 7) + 1
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -23,6 +23,18 @@ class TestLeapYear(unittest.TestCase):
|
|||||||
fixed_date = FixedDate(datetime(2000, 5, 4))
|
fixed_date = FixedDate(datetime(2000, 5, 4))
|
||||||
self.assertTrue(fixed_date.is_leap_year)
|
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):
|
def test_fixed_date_difference_over_gregorian_leap_day(self):
|
||||||
# in Gregorian system there are 7 days between,
|
# in Gregorian system there are 7 days between,
|
||||||
# but in IFC the leap day is at the end of June
|
# but in IFC the leap day is at the end of June
|
||||||
|
Loading…
x
Reference in New Issue
Block a user