From f032697478089fc2df59d448e59a6c4db5152639 Mon Sep 17 00:00:00 2001 From: Andy Grabow Date: Sun, 10 Mar 2019 20:37:11 +0100 Subject: [PATCH 1/2] added abitity to instanciate date objects --- pendulum/__init__.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pendulum/__init__.py b/pendulum/__init__.py index 2dcac7ac..e2d44b12 100644 --- a/pendulum/__init__.py +++ b/pendulum/__init__.py @@ -172,14 +172,17 @@ def instance( dt, tz=UTC # type: _datetime.datetime # type: Union[str, _Timezone, None] ): # type: (...) -> DateTime """ - Create a DateTime instance from a datetime one. + Create a DateTime instance from a datetime or date. """ - if not isinstance(dt, _datetime.datetime): - raise ValueError("instance() only accepts datetime objects.") + if not isinstance(dt, _datetime.datetime) and not isinstance(dt, _datetime.date): + raise ValueError("instance() only accepts datetime and date objects.") if isinstance(dt, DateTime): return dt + if isinstance(dt, _datetime.date): + dt = _datetime.datetime(dt.year, dt.month, dt.day) + tz = dt.tzinfo or tz # Checking for pytz/tzinfo From e9adb48ff02c63e12178ea419245adc3c6b49dc9 Mon Sep 17 00:00:00 2001 From: Andy Grabow Date: Sun, 10 Mar 2019 20:44:07 +0100 Subject: [PATCH 2/2] added documentation and test --- docs/docs/instantiation.md | 6 ++++++ tests/datetime/test_construct.py | 7 ++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/docs/docs/instantiation.md b/docs/docs/instantiation.md index 43fa7a4d..8e4f1501 100644 --- a/docs/docs/instantiation.md +++ b/docs/docs/instantiation.md @@ -135,10 +135,16 @@ and will set the timezone as well or default it to `UTC`. Finally, if you find yourself inheriting a `DateTime` instance, you can create a `DateTime` instance via the `instance()` function. +This also works with datetime.date instances. ```python >>> dt = datetime(2008, 1, 1) >>> p = pendulum.instance(dt) >>> print(p) '2008-01-01T00:00:00+00:00' +>>> d = date(2008, 1, 1) +>>> p = pendulum.instance(d) +>>> print(p) +'2008-01-01T00:00:00+00:00' + ``` diff --git a/tests/datetime/test_construct.py b/tests/datetime/test_construct.py index 149dec18..caf03e8c 100644 --- a/tests/datetime/test_construct.py +++ b/tests/datetime/test_construct.py @@ -4,7 +4,7 @@ import pendulum import pytest -from datetime import datetime +from datetime import datetime, date from dateutil import tz from pendulum import DateTime from pendulum.tz import timezone @@ -77,6 +77,11 @@ def test_instance_naive_datetime_defaults_to_utc(): assert now.timezone_name == "UTC" +def test_instance_naive_date(): + now = pendulum.instance(date.today()) + assert now.timezone_name == "UTC" + + def test_instance_timezone_aware_datetime(): now = pendulum.instance(datetime.now(timezone("Europe/Paris"))) assert now.timezone_name == "Europe/Paris"