diff --git a/crans_utils.py b/crans_utils.py index ffc5658..a7026b1 100644 --- a/crans_utils.py +++ b/crans_utils.py @@ -55,6 +55,11 @@ try: except: pytz = None +try: + import dateutil.tz +except: + dateutil = None + DEVNULL = open(os.devnull, 'w') def find_rid_plage(rid): @@ -340,21 +345,50 @@ def from_generalized_time_format(gtf): """ return time.mktime(time.strptime(gtf.split("-", 1)[0].split("+", 1)[0].split('Z', 1)[0], "%Y%m%d%H%M%S")) -def datetime_from_generalized_time_format(gtf): - """Returns a datetime from generalized time format +def localized_datetime(date=None, tz=None): + """Builds a datetime object based on a date string formatted as + %Y%m%d%H%M%S, and a tz timezone looking like +0200""" - """ + _notz = (tz is None) + + # Shit may happen + if tz == "Z": + tz = "+0000" + + if date is not None: + the_date = datetime.datetime.strptime(date, "%Y%m%d%H%M%S") + else: + the_date = datetime.datetime.now() + + # No timezone means we try to get from the system + # if we have dateutil, else, UTC. + if tz is None: + if dateutil is not None: + tz = datetime.datetime.now(dateutil.tz.tzlocal()).strftime("%z") + else: + tz = "+0000" + + # No pytz means no timezoned datetime + if pytz is not None: + the_timezone = pytz.FixedOffset(int(tz[0:-2])*60 + int(tz[-2:])) + the_date = the_timezone.localize(the_date) + the_date = the_timezone.normalize(the_date) + else: + # Maybe we can do something + if dateutil is not None: + if _notz: + the_date.replace(tzinfo=dateutil.tz.tzlocal()) + + return the_date + +def datetime_from_generalized_time_format(gtf): + """Returns a datetime from generalized time format""" if '-' in gtf or '+' in gtf: date, tz = gtf[0:14], gtf[14:] else: date = gtf.replace("Z", '') tz = '+0000' - the_date = datetime.datetime.strptime(date, "%Y%m%d%H%M%S") - if pytz is not None: - the_timezone = pytz.FixedOffset(int(tz[0:-2])*60 + int(tz[-2:])) - the_date = the_timezone.localize(the_date) - the_date = the_timezone.normalize(the_date) - return the_date + return localized_datetime(date, tz) def datetime_to_generalized_time_format(datetime_obj): """Transforms a datetime to a GTF"""