Python datetime à chaîne sans microseconde composant
Je suis en ajoutant de temps UTC, chaînes à Bitbucket API réponses qui ne contiennent actuellement que d'Amsterdam (!) les chaines de temps. Pour des raisons de cohérence avec l'heure UTC de chaînes retournées ailleurs, le format souhaité est 2011-11-03 11:07:04
(suivi par +00:00
, mais ce n'est pas pertinente).
Quelle est la meilleure façon pour créer une chaîne de caractères (sans une microseconde composant) à partir d'un datetime
instance avec une microseconde composant?
>>> import datetime
>>> print unicode(datetime.datetime.now())
2011-11-03 11:13:39.278026
Je vais ajouter la meilleure option qui m'est apparu comme une réponse possible, mais il y a peut-être une solution plus élégante.
Edit: je dois préciser que je ne suis pas fait impression à l'heure actuelle – j'ai utilisé datetime.now
de fournir un exemple rapide. Donc, la solution ne doit pas supposer que tout datetime
cas, il reçoit comprendra microseconde composants.
- Holà, quelqu'un avec mon nom
Vous devez vous connecter pour publier un commentaire.
Si vous voulez formater un
datetime
objet dans un format spécifique qui est différent du format standard, il est préférable de spécifier explicitement que format:Voir la documentation de
datetime.strftime()
pour une explication de la%
directives..isoformat()
, qui comprend les microsecondes par défaut. Si c'est ce que vous avez besoin, être explicite à ce sujet. Tout le monde va comprendre immédiatement ce que ce code ne. Presque personne ne va comprendre le code des autres sans regarder la documentation..isoformat()
laisse en microsecondes si elles sont égales à zéro.2017-05-11T12:54:23.123Z
, en PHP c'est2017-05-11T12:54:23+00:00
. Alors, qui est "ISO"? Ne soyez pas une menace. Utiliser des formats..isoformat([sep])
- Retourner une chaîne de caractères représentant la date et l'heure au format ISO 8601, AAAA-MM-JJTHH:MM:SS.mmmmmm ou, si la microseconde est 0, AAAA-MM-JJTHH:MM:SS"En Python 3.6:
https://docs.python.org/3.6/library/datetime.html#datetime.datetime.isoformat
C'est la façon dont je le fais. ISO format:
Vous pouvez remplacer le 'T' si vous ne voulez pas le format ISO:
.isoformat()
surunicode()
?unicode()
, et si vous voulez ISO-8601, utilisezisoformat()
unicode()
est plus pratique que de.isoformat().replace('T', ' ')
, certainement. 😉isoformat
accepte le séparateur prescripteur, donc pas de remplacer doit être fait. il suffit de ne:datetime.datetime.now().replace(microsecond=0).isoformat(' ')
Encore une autre option:
Par défaut, il utilise l'heure locale, si vous avez besoin de l'UTC, vous pouvez utiliser les éléments suivants:
Garder les 19 premiers caractères que vous avez voulu par tranchage:
+05:30
. Correcte seraitstr(now())[:19]
.Depuis pas tous
datetime.datetime
les instances ont une microseconde composant (c'est à dire quand il est à zéro), vous pouvez partition de la chaîne sur un "." et de ne prendre que le premier élément, qui fonctionnera toujours:J'ai l'habitude de faire:
de sortie:
Nous pouvons essayer quelque chose comme ci-dessous
.isoformat(' ', 'seconds')
, proposé dans une précédente réponse.J'ai trouvé ceci pour être le moyen le plus simple.