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 (!). Pour assurer la 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 normal).
Quel est le meilleur moyen de créer une telle chaîne (sans _ une composante microseconde) à partir d'une instance datetime
avec d'une composante microseconde?
>>> import datetime
>>> print unicode(datetime.datetime.now())
2011-11-03 11:13:39.278026
Je vais ajouter 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 en fait en train d’afficher l’heure actuelle - j’ai utilisé datetime.now
pour donner un exemple rapide. La solution ne doit donc pas supposer que les instances datetime
qu'elle recevra incluront des composants microsecondes.
Si vous souhaitez formater un objet datetime
dans un format spécifique différent du format standard, il est préférable de spécifier explicitement ce format:
>>> datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
'2011-11-03 18:21:26'
Voir la documentation de datetime.strftime()
pour une explication des directives %
.
>>> import datetime
>>> now = datetime.datetime.now()
>>> print unicode(now.replace(microsecond=0))
2011-11-03 11:19:07
C'est comme ça que je le fais. Format ISO:
import datetime
datetime.datetime.now().replace(microsecond=0).isoformat()
# Returns: '2017-01-23T14:58:07'
Vous pouvez remplacer le «T» si vous ne voulez pas le format ISO:
datetime.datetime.now().replace(microsecond=0).isoformat(' ')
# Returns: '2017-01-23 15:05:27'
En Python 3.6:
from datetime import datetime
datetime.datetime.now().isoformat(' ', 'seconds')
'2017-01-11 14:41:33'
https://docs.python.org/3.6/library/datetime.html#datetime.datetime.isoformat
Encore une autre option:
>>> import time
>>> time.strftime("%Y-%m-%d %H:%M:%S")
'2011-11-03 11:31:28'
Par défaut, cela utilise l'heure locale. Si vous avez besoin du temps UTC, vous pouvez utiliser les éléments suivants:
>>> time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime())
'2011-11-03 18:32:20'
Conservez les 19 premiers caractères que vous vouliez via slicing:
>>> str(datetime.datetime.now())[:19]
'2011-11-03 14:37:50'
Etant donné que toutes les instances de datetime.datetime
n’ont pas de composante microseconde (c’est-à-dire quand il est à zéro), vous pouvez partitionner la chaîne sur un "." et ne prenez que le premier élément, qui fonctionnera toujours:
unicode(datetime.datetime.now()).partition('.')[0]
Nous pouvons essayer quelque chose comme ci-dessous
import datetime
date_generated = datetime.datetime.now()
date_generated.replace(microsecond=0).isoformat(' ').partition('+')[0]
Je fais habituellement:
import datetime
now = datetime.datetime.now()
now = now.replace(microsecond=0) # To print now without microsecond.
# To print now:
print(now)
sortie:
2019-01-13 14:40:28
J'ai trouvé que c'était le moyen le plus simple.
>>> t = datetime.datetime.now()
>>> t
datetime.datetime(2018, 11, 30, 17, 21, 26, 606191)
>>> t = str(t).split('.')
>>> t
['2018-11-30 17:21:26', '606191']
>>> t = t[0]
>>> t
'2018-11-30 17:21:26'
>>>