Fonctionnalité pour générer un datetime timezone aware
* Prend un truc de la forme %Y%m%d%H%M%S, et une tz de la forme [+-]XXXX * On peut ne pas fournir le premier argument, auquel cas on prend la date actuele * On peut ne pas fournir la timezone, auquel cas elle sera fixée à celle du système si dateutil est installé, ou à UTC à défaut. * Si pas de pytz et que pas de tz fournie, dateutil est utilisé. * Si pas de pytz et pas de dateutil, le datetime ne sera pas timezone aware
This commit is contained in:
parent
4858953064
commit
dae802b057
1 changed files with 43 additions and 9 deletions
|
@ -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"""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue