Comment transformer une date / heure python en une chaîne, avec une date au format lisible?

171
t = e['updated_parsed']
dt = datetime.datetime(t[0],t[1],t[2],t[3],t[4],t[5],t[6]
print dt
>>>2010-01-28 08:39:49.000003

Comment puis-je transformer cela en une chaîne?:

"January 28, 2010"
TIMEX
la source
8
dt = datetime.datetime(*t[:7])

Réponses:

242

La classe datetime a une méthode strftime. La documentation Python documente les différents formats qu'elle accepte:

Pour cet exemple spécifique, cela ressemblerait à quelque chose comme:

my_datetime.strftime("%B %d, %Y")
Cristian
la source
1
Question idiote ... Est-ce que la strftimedifférence entre Python 2 et 3?
jww
Et si de
quelle
112

Voici comment vous pouvez accomplir la même chose en utilisant la fonction de mise en forme générale de python ...

>>>from datetime import datetime
>>>"{:%B %d, %Y}".format(datetime.now())

Les caractères de mise en forme utilisés ici sont les mêmes que ceux utilisés par strftime . Ne manquez pas le premier : dans le spécificateur de format.

L'utilisation de format () au lieu de strftime () dans la plupart des cas peut rendre le code plus lisible, plus facile à écrire et cohérent avec la façon dont la sortie formatée est générée ...

>>>"{} today's date is: {:%B %d, %Y}".format("Andre", datetime.now())

Comparez ce qui précède avec l'alternative strftime () suivante ...

>>>"{} today's date is {}".format("Andre", datetime.now().strftime("%B %d, %Y"))

De plus, ce qui suit ne fonctionnera pas ...

>>>datetime.now().strftime("%s %B %d, %Y" % "Andre")
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    datetime.now().strftime("%s %B %d, %Y" % "Andre")
TypeError: not enough arguments for format string

Etc...

Autocrate
la source
1
Je me suis demandé quels sont les avantages d'utiliser format () dans ce cas, par rapport à strftime (). L'une ou l'autre des méthodes présente-t-elle un avantage autre que la préférence personnelle? Quelles sont les différences de performances?
Andre
2
@Andre Merci pour votre question! Les préférences personnelles sont souvent guidées par l'expérience. Veuillez consulter ma réponse mise à jour pour savoir pourquoi je préfère format () à strftime (). Performance et Python sont deux mots qui ne vont pas bien ensemble. Je ne serais pas trop préoccupé par les performances si j'avais décidé d'utiliser Python. Lorsque j'ai besoin de performances, j'utilise un langage haute performance à typage statique.
Autodidacte
1
La méthode de formatage est plus simple dans la plupart des cas. Comparez: print 'Today is {:%B %d, %Y}'.format(datetime.now())à print 'Today is {}'.format(datetime.now().strftime('%B %d, %Y'). Lorsque vous utilisez de toute façon la méthode format (), pourquoi ne pas l'utiliser également pour le formatage de la date?
ChaimG
30

Utilisation de chaînes f, en Python 3.6+.

from datetime import datetime

date_string = f'{datetime.now():%Y-%m-%d %H:%M:%S%z}'
Natim
la source
Cela génère une erreur de syntaxe: «SyntaxError: syntaxe invalide». Pourriez-vous s'il vous plaît élaborer?
sajid
D'accord. J'ai Python 3.5.1. C'est pourquoi. Merci pour la clarification.
sajid
21

question très ancienne, je sais. mais avec les nouvelles f-strings (à partir de python 3.6) il y a de nouvelles options. donc ici pour l'exhaustivité:

from datetime import datetime

dt = datetime.now()

# str.format
strg = '{:%B %d, %Y}'.format(dt)
print(strg)  # July 22, 2017

# datetime.strftime
strg = dt.strftime('%B %d, %Y')
print(strg)  # July 22, 2017

# f-strings in python >= 3.6
strg = f'{dt:%B %d, %Y}'
print(strg)  # July 22, 2017

strftime()et strptime()Behavior explique ce que signifient les spécificateurs de format.

protagoniste de hiro
la source
10

L'objet datetime Python a un attribut de méthode, qui s'imprime dans un format lisible.

>>> a = datetime.now()
>>> a.ctime()
'Mon May 21 18:35:18 2018'
>>> 
SuperNova
la source
C'est l'un des moyens les meilleurs, les plus simples et les plus rapides d'obtenir le DateTime dans un format lisible.
Mujeeb Ishaque le
-2

C'est pour formater la date?

def format_date(day, month, year):
        # {} betekent 'plaats hier stringvoorstelling van volgend argument'
        return "{}/{}/{}".format(day, month, year)
Thomas Wouters
la source