J'ajoute des chaînes de temps UTC aux réponses de l'API Bitbucket qui ne contiennent actuellement que des chaînes de temps Amsterdam (!). Par souci de cohérence avec les chaînes de temps UTC renvoyées ailleurs, le format souhaité est 2011-11-03 11:07:04
(suivi de +00:00
, mais ce n'est pas pertinent).
Quelle est la meilleure façon de créer une telle chaîne ( sans composant microseconde) à partir d'une datetime
instance avec un composant microseconde?
>>> import datetime
>>> print unicode(datetime.datetime.now())
2011-11-03 11:13:39.278026
J'ajouterai la meilleure option qui m'est venue comme réponse possible, mais il pourrait bien y avoir une solution plus élégante.
Edit: Je dois mentionner que je ne suis pas fait imprimer l'heure actuelle - je datetime.now
donner un exemple rapide. La solution ne doit donc pas supposer que toutes les datetime
instances qu'elle recevra incluront des composants en microsecondes.
la source
.isoformat()
, qui inclut les microsecondes par défaut. Si c'est ce dont vous avez besoin, soyez explicite. Tout le monde comprendra immédiatement ce que fait ce code. Presque personne ne comprendra l'autre code sans consulter la documentation.la source
.isoformat([sep])
- Renvoyer une chaîne 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
la source
C'est ainsi que je le fais. Format ISO:
Vous pouvez remplacer le «T» si vous ne souhaitez pas le format ISO:
la source
.isoformat()
plusunicode()
?unicode()
, et si vous voulez ISO-8601, utilisezisoformat()
unicode()
est plus pratique que.isoformat().replace('T', ' ')
, certainement. ;)isoformat
accepte le spécificateur de séparateur, donc aucun remplacement ne doit être effectué. il suffit de faire:datetime.datetime.now().replace(microsecond=0).isoformat(' ')
Encore une autre option:
Par défaut, cela utilise l'heure locale, si vous avez besoin de l'UTC, vous pouvez utiliser ce qui suit:
la source
Gardez les 19 premiers caractères que vous vouliez via le découpage:
la source
+05:30
. Ce serait correctstr(now())[:19]
.10000
, une seconde sera manquéeJe fais habituellement:
production:
la source
Étant donné que toutes les
datetime.datetime
instances n'ont pas un composant microseconde (c'est-à-dire quand il est nul), vous pouvez partitionner la chaîne sur un "." et prenez uniquement le premier élément, qui fonctionnera toujours:la source
Nous pouvons essayer quelque chose comme ci-dessous
la source
.isoformat(' ', 'seconds')
, proposé dans une réponse précédente.J'ai trouvé que c'était le moyen le plus simple.
la source
J'utilise cela parce que je peux comprendre et donc mieux m'en souvenir (et le format de la date et de l'heure peut également être personnalisé en fonction de votre choix): -
la source