6
votes

Pyyaml ​​parse analyse ISO8601 peut-il?

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)


0 commentaires

3 Réponses :


9
votes

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))


0 commentaires

0
votes

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


0 commentaires

2
votes

Ceci est corrigé à partir de PyyAML 5.3 ( Demande de tir Github ) Xxx


0 commentaires