Source code for sos.qgstime
# -*- coding: utf-8 -*-
"""
QgsTime... classes
"""
import abc
from dateutil import parser as DateTimeParser
from datetime import datetime
#import pytz
[docs]class QgsTime (object):
"""
Abstract base class for QgsTime types
"""
__metadata__ = abc.ABCMeta
TimeInstant = 1
TimePeriod = 2
@abc.abstractmethod
def __init__(self, timePrimitive=0):
self._timePrimitive = timePrimitive
self._values = ["latest" for _ in range(timePrimitive)]
def _parse (self, dt):
"""
:param dt: datetime, latest or first
"""
if dt in ["latest", "first"]:
return dt
try:
dt = DateTimeParser.parse(dt)
except Exception:
dt = datetime.today().date()
#.utcnow()
#dt.replace(tzinfo=pytz.utc)
finally:
return dt
@property
def primitive (self):
return self._timePrimitive
def _getDate (self, i):
try:
return self._values[i].date()
except AttributeError:
return self._values[i]
except:
return
def _getTime (self, i):
try:
return self._values[i].time()
except:
return
def __str__(self):
toStr = lambda dt : dt if isinstance (dt, str) else str(dt).replace(" ", "T")
return " ".join([toStr(dt) for dt in self._values])
[docs]class QgsTimePeriod (QgsTime):
"""
Represents a time period with begin date and time and end date and time
"""
def __init__(self, begin="", end=""):
super(QgsTimePeriod, self).__init__(QgsTime.TimePeriod)
self._values[0] = self._parse(begin)
self._values[1] = self._parse(end)
@property
def beginDate (self):
return self._getDate(0)
@property
def beginTime (self):
return self._getTime(0)
@property
def endDate (self):
return self._getDate(1)
@property
def endTime (self):
return self._getTime(1)
[docs]class QgsTimeInstant (QgsTime):
"""
Represents a time instant
"""
def __init__(self, time=""):
super(QgsTimeInstant, self).__init__(QgsTime.TimeInstant)
self._values[0] = self._parse(time)
@property
def date (self):
return self._getDate(0)
@property
def time (self):
return self._getTime(0)