Ajout de fonctions generalizedTimeFormat <-> datetime
This commit is contained in:
parent
8eae322ab1
commit
fb542de099
1 changed files with 55 additions and 0 deletions
|
@ -34,6 +34,7 @@ import calendar
|
||||||
import netaddr
|
import netaddr
|
||||||
import re
|
import re
|
||||||
import time
|
import time
|
||||||
|
import datetime
|
||||||
import smtplib
|
import smtplib
|
||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
|
@ -49,6 +50,11 @@ from unicodedata import normalize
|
||||||
import subprocess
|
import subprocess
|
||||||
from netifaces import interfaces, ifaddresses, AF_INET
|
from netifaces import interfaces, ifaddresses, AF_INET
|
||||||
|
|
||||||
|
try:
|
||||||
|
import pytz
|
||||||
|
except:
|
||||||
|
pytz = None
|
||||||
|
|
||||||
DEVNULL = open(os.devnull, 'w')
|
DEVNULL = open(os.devnull, 'w')
|
||||||
|
|
||||||
def find_rid_plage(rid):
|
def find_rid_plage(rid):
|
||||||
|
@ -334,3 +340,52 @@ 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"))
|
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
|
||||||
|
|
||||||
|
"""
|
||||||
|
if '-' in gtf or '+' in gtf:
|
||||||
|
date, tz = gtf[0:14], gtf[14:]
|
||||||
|
else:
|
||||||
|
date = gtf.replace("Z", '')
|
||||||
|
tz = '0000'
|
||||||
|
tz = tz.replace('+', '')
|
||||||
|
the_date = datetime.datetime.strptime(date, "%Y%m%d%H%M%S")
|
||||||
|
if pytz is not None:
|
||||||
|
tz_dict = build_tz_dict()
|
||||||
|
the_timezone = tz_dict.get(tz, pytz.utc)
|
||||||
|
the_date = the_timezone.localize(the_date)
|
||||||
|
return the_date
|
||||||
|
|
||||||
|
def datetime_to_generalized_time_format(datetime_obj):
|
||||||
|
"""Transforms a datetime to a GTF"""
|
||||||
|
if datetime_obj.utcoffset() is None:
|
||||||
|
if pytz is not None:
|
||||||
|
datetime_obj = pytz.utc.localize(datetime_obj)
|
||||||
|
to_append = ""
|
||||||
|
else:
|
||||||
|
to_append = "Z"
|
||||||
|
mostly_gtf = datetime.datetime.strftime(datetime_obj, "%Y%m%d%H%M%S%z")
|
||||||
|
return mostly_gtf.replace('+0000', "Z") + to_append
|
||||||
|
|
||||||
|
def build_tz_dict():
|
||||||
|
"""Crappy way to define a dict containing all timezones that
|
||||||
|
pytz can handle.
|
||||||
|
|
||||||
|
It seems there is no way to get a tz object from the offset
|
||||||
|
with pytz.
|
||||||
|
|
||||||
|
"""
|
||||||
|
tz_dict = {}
|
||||||
|
for tz in pytz.common_timezones:
|
||||||
|
mytz = pytz.timezone(tz)
|
||||||
|
d = datetime.datetime.now(mytz).utcoffset().total_seconds()
|
||||||
|
hours = int(d)/3600
|
||||||
|
minutes = int(float(int(d) % 3600)/60)
|
||||||
|
fmt = "%s%02d%02d" % (sgn(hours), abs(hours), minutes)
|
||||||
|
if fmt not in tz_dict:
|
||||||
|
tz_dict[fmt] = mytz
|
||||||
|
return tz_dict
|
||||||
|
|
||||||
|
sgn = lambda x: '-' if x < 0 else ''
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue