This commit is contained in:
2016-12-15 21:30:31 -05:00
parent ecd0166ba2
commit 2864ed2f7b
+50 -3
View File
@@ -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 '<MayaDT epoch={}>'.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)