From 2864ed2f7bc4608622cb68f8ca8eb4da524e948d Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Thu, 15 Dec 2016 21:30:31 -0500 Subject: [PATCH] further --- maya.py | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 50 insertions(+), 3 deletions(-) diff --git a/maya.py b/maya.py index 25c9f12..c02c5f1 100644 --- a/maya.py +++ b/maya.py @@ -8,23 +8,64 @@ import warnings import ruamel.yaml warnings.simplefilter('ignore', ruamel.yaml.error.UnsafeLoaderWarning) + import email.utils import time from datetime import datetime as Datetime +import pytz +import humanize import dateparser +__epoch_start = (1970, 1, 1) + class MayaDT(object): """The Maya Datetime object.""" - def __init__(self, epoch): + + def __init__(self, epoch, timezone='UTC'): super(MayaDT, self).__init__() + self._timezone = timezone self._epoch = epoch def __repr__(self): return ''.format(self._epoch) def datetime(self): - return Datetime.fromtimestamp(self._epoch) + dt = Datetime.fromtimestamp(self._epoch) + return dt.replace(tzinfo=self.timezone) + + @property + def year(self): + self.datetime().year + + @property + def month(self): + self.datetime().month + + @property + def day(self): + self.datetime().day + + @property + def hour(self): + self.datetime().hour + + @property + def minute(self): + self.datetime().minute + + @property + def second(self): + self.datetime().second + + @property + def microsecond(self): + self.datetime().microsecond + + @property + def timezone(self): + return pytz.timezone(self._timezone) + def iso8601(self): return '{}Z'.format(self.datetime().isoformat()) @@ -32,6 +73,12 @@ class MayaDT(object): def epoch(self): return self._epoch + def human_date(self): + return humanize.naturaldate(self.datetime()) + + def human_time(self): + return humanize.naturaldate(self.datetime()) + def rfc2822(self): tt = self.datetime().timetuple() ts = time.mktime(tt) @@ -51,5 +98,5 @@ def when(string): dt = dateparser.parse(string) if dt is None: raise ValueError('invalid datetime input specified.') - epoch = (dt - Datetime(1970, 1, 1)).total_seconds() + epoch = (dt - Datetime(*__epoch_start)).total_seconds() return MayaDT(epoch) \ No newline at end of file