Looking for python Answers? Try Ask4KnowledgeBase
Looking for python Keywords? Try Ask4Keywords

Python Language Analyse d'une chaîne avec un nom de fuseau horaire court en un objet datetime sensible au fuseau horaire


Exemple

En utilisant la bibliothèque dateutil comme dans l' exemple précédent sur l'analyse des horodatages sensibles au fuseau horaire , il est également possible d'analyser les horodatages avec un nom de fuseau horaire spécifié "court".

Pour les dates formatées avec des noms de fuseau horaire courte ou des abréviations, qui sont généralement ambigus (par exemple CST, qui pourrait être Central Standard Time, Heure normale de Chine, Cuba heure normale, etc - plus peuvent être trouvés ici ) ou pas nécessairement disponibles dans une base de données standard , il est nécessaire de spécifier un mappage entre l’abréviation du fuseau horaire et l’objet tzinfo .

from dateutil import tz
from dateutil.parser import parse

ET = tz.gettz('US/Eastern')
CT = tz.gettz('US/Central')
MT = tz.gettz('US/Mountain')
PT = tz.gettz('US/Pacific')

us_tzinfos = {'CST': CT, 'CDT': CT,
              'EST': ET, 'EDT': ET,
              'MST': MT, 'MDT': MT,
              'PST': PT, 'PDT': PT}

dt_est = parse('2014-01-02 04:00:00 EST', tzinfos=us_tzinfos)
dt_pst = parse('2016-03-11 16:00:00 PST', tzinfos=us_tzinfos)

Après avoir exécuté ceci:

dt_est
# datetime.datetime(2014, 1, 2, 4, 0, tzinfo=tzfile('/usr/share/zoneinfo/US/Eastern'))
dt_pst
# datetime.datetime(2016, 3, 11, 16, 0, tzinfo=tzfile('/usr/share/zoneinfo/US/Pacific'))

Il est à noter que si vous utilisez un pytz horaire pytz avec cette méthode, celle-ci ne sera pas correctement localisée:

from dateutil.parser import parse
import pytz

EST = pytz.timezone('America/New_York')
dt = parse('2014-02-03 09:17:00 EST', tzinfos={'EST': EST})

Cela attache simplement le pytz horaire de pytz à la date et heure:

dt.tzinfo # Will be in Local Mean Time!
# <DstTzInfo 'America/New_York' LMT-1 day, 19:04:00 STD>

Si vous utilisez cette méthode, vous devriez probablement re localize la partie naïve du datetime après l' analyse syntaxique:

dt_fixed = dt.tzinfo.localize(dt.replace(tzinfo=None))
dt_fixed.tzinfo # Now it's EST.
# <DstTzInfo 'America/New_York' EST-1 day, 19:00:00 STD>)