selon la spécification YAML, les dates ISO8601 avec des fuseaux horaires doivent être reconnues . Cependant, en essayant de les analyser à l'aide de PyyAML 3.10 (sous Windows 7 avec ActivePyThon 2.7.2.5), je reçois des dates naïves:
In [7]: yaml.load("2001-12-14t21:59:43.10-05:00") Out[7]: datetime.datetime(2001, 12, 15, 2, 59, 43, 100000) In [8]: yaml.load("2001-12-14 21:59:43.10 -5") Out[8]: datetime.datetime(2001, 12, 15, 2, 59, 43, 100000)
3 Réponses :
Si vous n'aimez pas le comportement par défaut (DateTime NAIVE UCC DateTime, UTC Offset perdue) Vous pouvez fournir votre propre constructeur:
import dateutil.parser import yaml def timestamp_constructor(loader, node): return dateutil.parser.parse(node.value) yaml.add_constructor(u'tag:yaml.org,2002:timestamp', timestamp_constructor) print(repr(yaml.load("2001-12-14T21:59:43.10-05:00"))) # -> datetime.datetime(2001, 12, 14, 21, 59, 43, 100000, tzinfo=tzoffset(None, -18000))
Cela affecte également Django lors du chargement des luminaires de base de données des fichiers YAML. Il y a une solution de contournement spécifique à Django; Voir: LoadData ne traite pas correctement avec des horodatages et des fuseaux horaires p>