day of year and week of month properites

This commit is contained in:
PyryL 2022-12-11 09:59:43 +02:00
parent 683203e446
commit dab58a8162
2 changed files with 26 additions and 1 deletions

View File

@ -1,4 +1,5 @@
from datetime import datetime
from math import floor
class FixedDate:
def __init__(self, date = None, day_of_year = None, year = None):
@ -35,6 +36,10 @@ class FixedDate:
"""
return (day_of_year, year)
@property
def day_of_year(self):
return self._day_of_year
@property
def day_of_month(self):
"""In range 1...29"""
@ -54,7 +59,17 @@ class FixedDate:
def is_year_day(self) -> bool:
return self.month == 14 and self.day_of_month == 1
# TODO: week of month
@property
def week_of_month(self) -> int:
"""The ordinal of the week in month. Value 1 for year day.
Returns:
int: In range 1...4
"""
if self.is_year_day:
return 1
return ((self.day_of_month-1) // 7) + 1
# TODO: week of year
# TODO: weekday
# TODO: year quarter

View File

@ -8,18 +8,24 @@ class TestBasicDatetimeInit(unittest.TestCase):
self.assertEqual(fixed_date.year, 2022)
self.assertEqual(fixed_date.month, 1)
self.assertEqual(fixed_date.day_of_month, 1)
self.assertEqual(fixed_date.day_of_year, 1)
self.assertEqual(fixed_date.week_of_month, 1)
def test_datetime_init_february_last(self):
fixed_date = FixedDate(date=datetime(2022, 2, 25))
self.assertEqual(fixed_date.year, 2022)
self.assertEqual(fixed_date.month, 2)
self.assertEqual(fixed_date.day_of_month, 28)
self.assertEqual(fixed_date.day_of_year, 56)
self.assertEqual(fixed_date.week_of_month, 4)
def test_datetime_init_sol_month(self):
fixed_date = FixedDate(date=datetime(2022, 6, 20))
self.assertEqual(fixed_date.year, 2022)
self.assertEqual(fixed_date.month, 7)
self.assertEqual(fixed_date.day_of_month, 3)
self.assertEqual(fixed_date.day_of_year, 171)
self.assertEqual(fixed_date.week_of_month, 1)
def test_datetime_init_december_last(self):
fixed_date = FixedDate(date=datetime(2022, 12, 30))
@ -27,6 +33,8 @@ class TestBasicDatetimeInit(unittest.TestCase):
self.assertEqual(fixed_date.month, 13)
self.assertEqual(fixed_date.day_of_month, 28)
self.assertFalse(fixed_date.is_year_day)
self.assertEqual(fixed_date.day_of_year, 364)
self.assertEqual(fixed_date.week_of_month, 4)
def test_datetime_init_year_day(self):
fixed_date = FixedDate(date=datetime(2022, 12, 31))
@ -34,3 +42,5 @@ class TestBasicDatetimeInit(unittest.TestCase):
self.assertEqual(fixed_date.month, 14)
self.assertEqual(fixed_date.day_of_month, 1)
self.assertTrue(fixed_date.is_year_day)
self.assertEqual(fixed_date.day_of_year, 365)
self.assertEqual(fixed_date.week_of_month, 1)