From 24063b5e1b3ad0cbd90ad9137e200d18e7ee8d8e Mon Sep 17 00:00:00 2001 From: Tom Barron Date: Mon, 29 Jan 2018 18:10:36 -0500 Subject: [PATCH 1/3] New test and code to address issue 104 --- maya/core.py | 16 +++++++++++++--- tests/test_maya.py | 19 +++++++++++++++---- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/maya/core.py b/maya/core.py index 6112b75..51e7159 100644 --- a/maya/core.py +++ b/maya/core.py @@ -176,12 +176,12 @@ class MayaDT(object): def from_datetime(klass, dt): """Returns MayaDT instance from datetime.""" return klass(klass.__dt_to_epoch(dt)) - + @classmethod @validate_arguments_type_of_function(time.struct_time) def from_struct(klass, struct, timezone=pytz.UTC): - """Returns MayaDT instance from a 9-tuple struct""" - struct_time = time.mktime(struct) + """Returns MayaDT instance from a 9-tuple struct (assumed to be from gmtime())""" + struct_time = time.mktime(struct) - utc_offset() dt = Datetime.fromtimestamp(struct_time, timezone) return klass(klass.__dt_to_epoch(dt)) @@ -298,6 +298,16 @@ class MayaDT(object): return humanize.naturaltime(dt) +def utc_offset(): + """Returns the current local time offset from UTC accounting for DST """ + ts = time.localtime() + if ts[-1]: + offset = time.altzone + else: + offset = time.timezone + return offset + + def to_utc_offset_naive(dt): if dt.tzinfo is None: return dt diff --git a/tests/test_maya.py b/tests/test_maya.py index 8bfefb7..6f5c0de 100644 --- a/tests/test_maya.py +++ b/tests/test_maya.py @@ -67,19 +67,30 @@ def test_parse_iso8601(): def test_struct(): - ts = time.gmtime() + now = round(time.time()) + ts = time.gmtime(now) m = maya.MayaDT.from_struct(ts) - dt = Datetime.fromtimestamp(time.mktime(ts), pytz.UTC) + dt = Datetime.fromtimestamp(now, pytz.UTC) assert m._epoch != None assert m.datetime() == dt - ts = time.localtime() + ts = time.localtime(now) m = maya.MayaDT.from_struct(ts) - dt = Datetime.fromtimestamp(time.mktime(ts), pytz.UTC) + dt = Datetime.fromtimestamp(time.mktime(ts) - maya.core.utc_offset(), pytz.UTC) assert m._epoch != None assert m.datetime() == dt +def test_issue_104(): + e = 1507756331 + t = Datetime.utcfromtimestamp(e) + t = maya.MayaDT.from_datetime(t) + assert str(t) == 'Wed, 11 Oct 2017 21:12:11 GMT' + t = time.gmtime(e) + t = maya.MayaDT.from_struct(t) + assert str(t) == 'Wed, 11 Oct 2017 21:12:11 GMT' + + def test_human_when(): r1 = maya.when('yesterday') r2 = maya.when('today') From 565fdd6a9ee4026ab8b339b363c71003e707fc90 Mon Sep 17 00:00:00 2001 From: Tom Barron Date: Mon, 29 Jan 2018 18:18:52 -0500 Subject: [PATCH 2/3] Add myself to AUTHORS file --- AUTHORS.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.rst b/AUTHORS.rst index 5fde2a3..3b27f00 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -23,3 +23,4 @@ In chronological order: - Sébastien Eustace (`@sdispater `_) - Evan Mattiza (`@emattiza `_) - Dima Spivak (`@dimaspivak `_) +- Tom Barron (`@dtbarron `_) From 9066ee862dde2625a160d37e821fcbb21fc1f886 Mon Sep 17 00:00:00 2001 From: radek-sprta Date: Sat, 3 Feb 2018 12:37:25 +0100 Subject: [PATCH 3/3] Add date property to MayaDT --- maya/core.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/maya/core.py b/maya/core.py index 6112b75..a8e37aa 100644 --- a/maya/core.py +++ b/maya/core.py @@ -254,6 +254,10 @@ class MayaDT(object): @property def day(self): return self.datetime().day + + @property + def date(self): + return self.datetime().date() @property def week(self):