Python UTC objet datetime du format ISO ne comprend pas Z (Zoulou ou le décalage de Zéro)
Pourquoi python 2.7 ne comprend pas le caractère Z (Zoulou ou le décalage de zéro) à la fin de l'UTC objet datetime est isoformat chaîne contrairement à JavaScript?
>>> datetime.datetime.utcnow().isoformat()
'2013-10-29T09:14:03.895210'
Alors que dans le javascript
>>> console.log(new Date().toISOString());
2013-10-29T09:38:41.341Z
- Python valeurs datetime ont PAS d'informations sur le fuseau horaire. Essayez pytz ou Babel si vous voulez le fuseau horaire des informations stockées dans votre horodatage.
datetime.datetime.utcnow().isoformat() + 'Z'
- Connexes: Comment faire pour avoir une isoformat datetime chaîne, y compris le fuseau horaire par défaut?
- ..et le manque Z étonnamment causes de certaines choses, de ne pas travailler par exemple les appels de l'API
InformationsquelleAutor Murali Mopuru | 2013-10-29
Vous devez vous connecter pour publier un commentaire.
Python
datetime
objets n'ont pas le temps de la zone d'info par défaut, et sans elle, Python fait viole la norme ISO 8601 spécification (si aucun horaire de l'info est donnée, supposé être à l'heure locale). Vous pouvez utiliser le pytz paquet pour obtenir certains fuseaux horaires par défaut, ou directement à la sous-classetzinfo
vous-même:Ensuite, vous pouvez ajouter manuellement le fuseau horaire pour info
utcnow()
:Noter que ce NE sont conformes à la norme ISO 8601, qui permettent
Z
ou+00:00
que le suffixe de l'UTC. A noter que ce dernier fait est conforme à la norme de mieux, avec le temps, les zones sont représentées en général (UTC est un cas spécial.)Z
au lieu de+00:00
?pytz
viole Pythontzinfo
protocole, et il est dangereux de l'utiliser! Voir blog.ganssle.io/articles/2018/03/pytz-fastest-footgun.htmlpytz
n'utilisez pas l'interface standard quidatetime
attend, ou qu'une alternative àpytz
offrant l'IANA/Olson Base de données existe. J'ai passé beaucoup de temps récemment, essayer de déterminer pourquoi monAustralia/Melbourne
le zonage de datetimes (UTC+10/11) étaient de retour UTC+9:40. Votre article fait la raison pour clair.dateutil
de travail n'étaient pas mises en œuvre jusqu'à ce que Python 3.6 avec PEP 495, pour ainsi direpytz
n'utilisez pas l'interface standard est injuste, car l'interface a changé. Avant le changement, le seul moyen de le faire fonctionner était la façonpytz
fait.Option:
isoformat()
Python
datetime
ne prend pas en charge la militaire fuseau horaire des suffixes comme " Z " suffixe de l'UTC. Le simple suivant de la chaîne de remplacement est le tour est joué:str(d)
est essentiellement la même qued.isoformat(sep=' ')
Voir: Datetime, De La Bibliothèque Standard De Python
Option:
strftime()
Ou vous pouvez utiliser
strftime
pour obtenir le même effet:Remarque: Cette option ne fonctionne que lorsque vous savez que la date indiquée est en UTC.
Voir: datetime.strftime()
Supplémentaires: Lisible Par L'Homme Fuseau Horaire
D'aller plus loin, vous pouvez être intéressé par l'affichage lisible par les informations de fuseau horaire,
pytz
avecstrftime
%Z
fuseau horaire indicateur:T
au lieu d'être vide?Python datetimes sont un peu maladroit. Utilisation
arrow
.Flèche a essentiellement la même api que datetime, mais avec les fuseaux horaires et les subtilités qui devrait être dans la bibliothèque principale.
Un format compatible avec Javascript peut être réalisé par:
Javascript
Date.parse
va tranquillement chute de microsecondes de l'horodatage.Le code javascript suivant et scripts python donner des sorties identiques. Je pense que c'est ce que vous cherchez.
JavaScript
Python
La sortie qu'ils donnent est de l'utc (zelda) temps sous la forme d'un ISO de chaîne avec un 3 à la milliseconde chiffre significatif et se terminant par un Z.
En Python >= 3.2 vous pouvez simplement utiliser ce:
Z
, vous pouvez découper le décalage:.isoformat()[:-6] + 'Z'
Il y a beaucoup de bonnes réponses sur le post, mais je voulais le format à venir exactement comme il le fait avec JavaScript. C'est ce que j'utilise et ça fonctionne bien.
En combinant toutes les réponses ci-dessus, je suis venu avec la fonction suivante :
J'utilise le pendule:
Ou, pour le faire d'un seul coup: