From 3b0f2cfe728b4353f530118ba76d85f5a54f9270 Mon Sep 17 00:00:00 2001 From: PyryL Date: Sun, 11 Dec 2022 10:20:12 +0200 Subject: [PATCH] construction of datetime object from fixed date --- fixedcal/core/date.py | 12 ++++++++++-- tests/basic_datetime_test.py | 6 ++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/fixedcal/core/date.py b/fixedcal/core/date.py index 7d9f05b..73cc1cf 100644 --- a/fixedcal/core/date.py +++ b/fixedcal/core/date.py @@ -1,4 +1,4 @@ -from datetime import datetime +from datetime import datetime, timedelta from math import floor class FixedDate: @@ -36,6 +36,15 @@ class FixedDate: """ return (day_of_year, year) + @property + def datetime(self) -> datetime: + """Construct a native datetime object from fixed date. + + Returns: + datetime: Datetime equal to the fixed date. + """ + return datetime(self.year, 1, 1) + timedelta(self._day_of_year-1) + @property def day_of_year(self): return self._day_of_year @@ -99,6 +108,5 @@ class FixedDate: return 4 return ((self.day_of_year-1) // 91) + 1 - # TODO: datetime instance # TODO: plus and minus operations # TODO: equatable diff --git a/tests/basic_datetime_test.py b/tests/basic_datetime_test.py index 02bf8c9..cc09c5a 100644 --- a/tests/basic_datetime_test.py +++ b/tests/basic_datetime_test.py @@ -5,6 +5,7 @@ from fixedcal.core.date import FixedDate class TestBasicDatetimeInit(unittest.TestCase): def test_datetime_init_january_first(self): fixed_date = FixedDate(date=datetime(2022, 1, 1)) + self.assertEqual(fixed_date.datetime, datetime(2022, 1, 1)) self.assertEqual(fixed_date.year, 2022) self.assertEqual(fixed_date.month, 1) self.assertEqual(fixed_date.day_of_month, 1) @@ -16,6 +17,7 @@ class TestBasicDatetimeInit(unittest.TestCase): def test_datetime_init_february_last(self): fixed_date = FixedDate(date=datetime(2022, 2, 25)) + self.assertEqual(fixed_date.datetime, datetime(2022, 2, 25)) self.assertEqual(fixed_date.year, 2022) self.assertEqual(fixed_date.month, 2) self.assertEqual(fixed_date.day_of_month, 28) @@ -27,6 +29,7 @@ class TestBasicDatetimeInit(unittest.TestCase): def test_datetime_init_sol_month(self): fixed_date = FixedDate(date=datetime(2022, 6, 20)) + self.assertEqual(fixed_date.datetime, datetime(2022, 6, 20)) self.assertEqual(fixed_date.year, 2022) self.assertEqual(fixed_date.month, 7) self.assertEqual(fixed_date.day_of_month, 3) @@ -38,6 +41,7 @@ class TestBasicDatetimeInit(unittest.TestCase): def test_datetime_init_middle_of_september(self): fixed_date = FixedDate(date=datetime(2022, 9, 15)) + self.assertEqual(fixed_date.datetime, datetime(2022, 9, 15)) self.assertEqual(fixed_date.year, 2022) self.assertEqual(fixed_date.month, 10) self.assertEqual(fixed_date.day_of_month, 6) @@ -49,6 +53,7 @@ class TestBasicDatetimeInit(unittest.TestCase): def test_datetime_init_december_last(self): fixed_date = FixedDate(date=datetime(2022, 12, 30)) + self.assertEqual(fixed_date.datetime, datetime(2022, 12, 30)) self.assertEqual(fixed_date.year, 2022) self.assertEqual(fixed_date.month, 13) self.assertEqual(fixed_date.day_of_month, 28) @@ -61,6 +66,7 @@ class TestBasicDatetimeInit(unittest.TestCase): def test_datetime_init_year_day(self): fixed_date = FixedDate(date=datetime(2022, 12, 31)) + self.assertEqual(fixed_date.datetime, datetime(2022, 12, 31)) self.assertEqual(fixed_date.year, 2022) self.assertEqual(fixed_date.month, 14) self.assertEqual(fixed_date.day_of_month, 1)