day of year and week of month properites
This commit is contained in:
parent
683203e446
commit
dab58a8162
@ -1,4 +1,5 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from math import floor
|
||||||
|
|
||||||
class FixedDate:
|
class FixedDate:
|
||||||
def __init__(self, date = None, day_of_year = None, year = None):
|
def __init__(self, date = None, day_of_year = None, year = None):
|
||||||
@ -35,6 +36,10 @@ class FixedDate:
|
|||||||
"""
|
"""
|
||||||
return (day_of_year, year)
|
return (day_of_year, year)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def day_of_year(self):
|
||||||
|
return self._day_of_year
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def day_of_month(self):
|
def day_of_month(self):
|
||||||
"""In range 1...29"""
|
"""In range 1...29"""
|
||||||
@ -54,7 +59,17 @@ class FixedDate:
|
|||||||
def is_year_day(self) -> bool:
|
def is_year_day(self) -> bool:
|
||||||
return self.month == 14 and self.day_of_month == 1
|
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: week of year
|
||||||
# TODO: weekday
|
# TODO: weekday
|
||||||
# TODO: year quarter
|
# TODO: year quarter
|
||||||
|
@ -8,18 +8,24 @@ class TestBasicDatetimeInit(unittest.TestCase):
|
|||||||
self.assertEqual(fixed_date.year, 2022)
|
self.assertEqual(fixed_date.year, 2022)
|
||||||
self.assertEqual(fixed_date.month, 1)
|
self.assertEqual(fixed_date.month, 1)
|
||||||
self.assertEqual(fixed_date.day_of_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):
|
def test_datetime_init_february_last(self):
|
||||||
fixed_date = FixedDate(date=datetime(2022, 2, 25))
|
fixed_date = FixedDate(date=datetime(2022, 2, 25))
|
||||||
self.assertEqual(fixed_date.year, 2022)
|
self.assertEqual(fixed_date.year, 2022)
|
||||||
self.assertEqual(fixed_date.month, 2)
|
self.assertEqual(fixed_date.month, 2)
|
||||||
self.assertEqual(fixed_date.day_of_month, 28)
|
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):
|
def test_datetime_init_sol_month(self):
|
||||||
fixed_date = FixedDate(date=datetime(2022, 6, 20))
|
fixed_date = FixedDate(date=datetime(2022, 6, 20))
|
||||||
self.assertEqual(fixed_date.year, 2022)
|
self.assertEqual(fixed_date.year, 2022)
|
||||||
self.assertEqual(fixed_date.month, 7)
|
self.assertEqual(fixed_date.month, 7)
|
||||||
self.assertEqual(fixed_date.day_of_month, 3)
|
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):
|
def test_datetime_init_december_last(self):
|
||||||
fixed_date = FixedDate(date=datetime(2022, 12, 30))
|
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.month, 13)
|
||||||
self.assertEqual(fixed_date.day_of_month, 28)
|
self.assertEqual(fixed_date.day_of_month, 28)
|
||||||
self.assertFalse(fixed_date.is_year_day)
|
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):
|
def test_datetime_init_year_day(self):
|
||||||
fixed_date = FixedDate(date=datetime(2022, 12, 31))
|
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.month, 14)
|
||||||
self.assertEqual(fixed_date.day_of_month, 1)
|
self.assertEqual(fixed_date.day_of_month, 1)
|
||||||
self.assertTrue(fixed_date.is_year_day)
|
self.assertTrue(fixed_date.is_year_day)
|
||||||
|
self.assertEqual(fixed_date.day_of_year, 365)
|
||||||
|
self.assertEqual(fixed_date.week_of_month, 1)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user