Convertir un objet datetime en une chaîne de date uniquement en Python


282

Je vois beaucoup de choses sur la conversion d'une chaîne de date en un datetimeobjet en Python, mais je veux aller dans l'autre sens.
j'ai

datetime.datetime(2012, 2, 23, 0, 0)

et je voudrais le convertir en chaîne comme '2/23/2012'.

Réponses:


489

Vous pouvez utiliser strftime pour vous aider à formater votre date.

Par exemple,

import datetime
t = datetime.datetime(2012, 2, 23, 0, 0)
t.strftime('%m/%d/%Y')

donnera:

'02/23/2012'

Plus d'informations sur le formatage voir ici


6
Très utile pour DateTimeFieldou DateFielddans Django. Merci
erajuan

3
utiliser t = datetime.datetime.now()pour utiliser la date actuelle
gizzmole

Pour autant que je sache à partir des documents, il n'y a aucun moyen de renvoyer une date remplie non nulle, c'est-à-dire '23/02/2012'.
Ron Kalian

183

dateet les datetimeobjets (et timeaussi) prennent en charge un mini-langage pour spécifier la sortie , et il y a deux façons d'y accéder:

  • appel de méthode directe: dt.strftime('format here'); et
  • nouvelle méthode de formatage: '{:format here}'.format(dt)

Ainsi, votre exemple pourrait ressembler à:

dt.strftime('%m/%d/%Y')

ou

'{:%m/%d/%Y}'.format(dt)

Par souci d'exhaustivité: vous pouvez également accéder directement aux attributs de l'objet, mais vous n'obtenez alors que les chiffres:

'%s/%s/%s' % (dt.month, dt.day, dt.year)

Le temps pris pour apprendre la mini-langue en vaut la peine.


Pour référence, voici les codes utilisés dans le mini-langage:

  • %a Jour de semaine comme nom abrégé des paramètres régionaux.
  • %A Jour de semaine comme nom complet de la locale.
  • %w Jour de la semaine sous forme décimale, où 0 correspond au dimanche et 6 au samedi.
  • %d Jour du mois sous forme de nombre décimal avec un zéro.
  • %b Mois comme nom abrégé des paramètres régionaux.
  • %B Mois comme nom complet de la locale.
  • %m Mois sous forme de nombre décimal avec un zéro. 01, ..., 12
  • %y Année sans siècle sous forme de nombre décimal à remplissage zéro. 00, ..., 99
  • %Y Année avec siècle comme nombre décimal. 1970, 1988, 2001, 2013
  • %H Heure (horloge de 24 heures) sous forme de nombre décimal à zéro. 00, ..., 23
  • %I Heure (horloge de 12 heures) sous forme de nombre décimal à zéro. 01, ..., 12
  • %p Équivalent des paramètres régionaux AM ou PM.
  • %M Minute sous forme de nombre décimal à remplissage zéro. 00, ..., 59
  • %S Deuxième en tant que nombre décimal à remplissage zéro. 00, ..., 59
  • %f La microseconde en nombre décimal, complétée par un zéro à gauche. 000000, ..., 999999
  • %z Décalage UTC sous la forme + HHMM ou -HHMM (vide si naïf), +0000, -0400, +1030
  • %Z Nom du fuseau horaire (vide si naïf), UTC, EST, CST
  • %j Jour de l'année sous forme de nombre décimal à remplissage zéro. 001, ..., 366
  • %U Numéro de semaine de l'année (le dimanche est le premier) sous forme de nombre décimal avec un zéro.
  • %W Numéro de semaine de l'année (le lundi est le premier) sous forme de nombre décimal.
  • %c Représentation appropriée de la date et de l'heure des paramètres régionaux.
  • %x Représentation de date appropriée des paramètres régionaux.
  • %X Représentation temporelle appropriée des paramètres régionaux.
  • %% Un caractère '%' littéral.

29

Une autre option:

import datetime
now=datetime.datetime.now()
now.isoformat()
# ouptut --> '2016-03-09T08:18:20.860968'

Bien que la question concerne l'obtention de "date seulement", je suis venu pour ^ ceci, alors merci. Aussi, pour obtenir une chaîne un peu plus humaine: datetime.datetime.now().ctime()==>'Wed Sep 4 13:12:39 2019'
Denis

13

Vous pouvez utiliser des méthodes de formatage de chaîne simples:

>>> dt = datetime.datetime(2012, 2, 23, 0, 0)
>>> '{0.month}/{0.day}/{0.year}'.format(dt)
'2/23/2012'
>>> '%s/%s/%s' % (dt.month, dt.day, dt.year)
'2/23/2012'

3
de même, vous pouvez faire quelque chose comme '{:%Y-%m-%d %H:%M}'.format(datetime(2001, 2, 3, 4, 5)). Voir plus sur pyformat.info
mway


5

Si vous cherchez un moyen simple de datetimeconvertir la chaîne et que vous pouvez omettre le format. Vous pouvez convertir un datetimeobjet en str, puis utiliser le découpage de tableau.

In [1]: from datetime import datetime

In [2]: now = datetime.now()

In [3]: str(now)
Out[3]: '2019-04-26 18:03:50.941332'

In [5]: str(now)[:10]
Out[5]: '2019-04-26'

In [6]: str(now)[:19]
Out[6]: '2019-04-26 18:03:50'

Mais notez la chose suivante. Si d'autres solutions augmentent AttributeErrorlorsque la variable est Nonedans ce cas, vous recevrez une 'None'chaîne.

In [9]: str(None)[:19]
Out[9]: 'None'

3

Il est possible de convertir un objet datetime en chaîne en travaillant directement avec les composants de l'objet datetime.

from datetime import date  

myDate = date.today()    
#print(myDate) would output 2017-05-23 because that is today
#reassign the myDate variable to myDate = myDate.month 
#then you could print(myDate.month) and you would get 5 as an integer
dateStr = str(myDate.month)+ "/" + str(myDate.day) + "/" + str(myDate.year)    
# myDate.month is equal to 5 as an integer, i use str() to change it to a 
# string I add(+)the "/" so now I have "5/" then myDate.day is 23 as
# an integer i change it to a string with str() and it is added to the "5/"   
# to get "5/23" and then I add another "/" now we have "5/23/" next is the 
# year which is 2017 as an integer, I use the function str() to change it to 
# a string and add it to the rest of the string.  Now we have "5/23/2017" as 
# a string. The final line prints the string.

print(dateStr)  

Sortie -> 23/05/2017


2

Vous pouvez convertir datetime en chaîne.

published_at = "{}".format(self.published_at)

2

La concaténation de chaînes,, str.joinpeut être utilisée pour créer la chaîne.

d = datetime.now()
'/'.join(str(x) for x in (d.month, d.day, d.year))
'3/7/2016'

1

Si vous voulez aussi du temps, allez-y avec

datetime.datetime.now().__str__()

Imprime 2019-07-11 19:36:31.118766dans la console pour moi

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.