web-dev-qa-db-fra.com

Date/heure Python en chaîne sans composant microseconde

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 datetimeavec 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.

328
davidchambers

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 %.

702
Sven Marnach
>>> import datetime
>>> now = datetime.datetime.now()
>>> print unicode(now.replace(microsecond=0))
2011-11-03 11:19:07
141
davidchambers

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'
34
radtek

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

33
codeif

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'
16
Andrew Clark

Conservez les 19 premiers caractères que vous vouliez via slicing:

>>> str(datetime.datetime.now())[:19]
'2011-11-03 14:37:50'
14
Steven Rumbalski

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]
5
Austin Marshall

Nous pouvons essayer quelque chose comme ci-dessous

import datetime

date_generated = datetime.datetime.now()
date_generated.replace(microsecond=0).isoformat(' ').partition('+')[0]
1
Abhishek Bajaj

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
1
An0n

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'
>>> 
0
Muhammed Irfan