web-dev-qa-db-fra.com

Convertit l'objet datetime en chaîne de date uniquement dans Python

Je vois beaucoup de choses sur la conversion d'une chaîne de date en un objet datetime en Python, mais je veux faire l'inverse.
J'ai

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

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

255
wilbev

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

434
Levon

Les objets date et datetime (ainsi que time) prennent en charge un mini-langage permettant de spécifier une sortie , et il existe deux manières d'y accéder:

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

Donc, 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 obtenez alors uniquement les chiffres:

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

Le temps nécessaire pour apprendre la mini-langue en vaut la peine.


Pour référence, voici les codes utilisés dans la mini-langue:

  • %a Weekday comme nom abrégé de l’environnement local.
  • %A Weekday comme nom complet de l'environnement local.
  • %w Jour de la semaine sous forme de nombre décimal, 0 représentant le dimanche et 6 le samedi.
  • %d Jour du mois sous forme de nombre décimal complété à zéro.
  • %b Mois en tant que nom abrégé de l’environnement local.
  • %B Mois comme nom complet de l’environnement local.
  • %m Mois sous forme de nombre décimal complété à zéro. 01, ..., 12
  • %y Année sans siècle sous la forme d'un nombre décimal complété à zéro. 00, ..., 99
  • %Y Année avec siècle sous forme décimale. 1970, 1988, 2001, 2013
  • %H Hour (horloge de 24 heures) sous forme de nombre décimal complété à zéro. 00, ..., 23
  • %I Heure (horloge de 12 heures) sous forme de nombre décimal complété à zéro. 01, ..., 12
  • %p L'équivalent régional de AM ou PM.
  • %M Minute sous la forme d'un nombre décimal complété à zéro. 00, ..., 59
  • %S Deuxième en tant que nombre décimal complété à zéro. 00, ..., 59
  • %f Microsecondes sous forme de nombre décimal, complétées par des zéros à 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 zéro. 001, ..., 366
  • %U Numéro de semaine de l'année (le dimanche est le premier) sous forme de nombre décimal zéro.
  • %W Numéro de la semaine de l'année (le lundi est la première) sous forme de nombre décimal.
  • %c Représentation locale de la date et de l’heure.
  • %x Représentation de la date par les paramètres régionaux.
  • %X Représentation temporelle appropriée des paramètres régionaux.
  • %% Un caractère '%' littéral.
163
Ethan Furman

Une autre option:

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

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

>>> 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'
12
juliomalegria

type-specific formatting peut également être utilisé:

_t = datetime.datetime(2012, 2, 23, 0, 0)
"{:%m/%d/%Y}".format(t)
_

Sortie:

_'02/23/2012'
_
9
midori

La concaténation de chaîne, str.join, peut être utilisée pour construire la chaîne.

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

Vous pouvez convertir date/heure en chaîne.

published_at = "{}".format(self.published_at)
2
Kimsal San

Il est possible de convertir un objet datetime en une 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
Darrell White

Si vous cherchez un moyen simple de convertir datetime en chaîne, vous pouvez omettre le format. Vous pouvez convertir l'objet datetime en str, puis utiliser le découpage en 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 ce qui suit. Si d'autres solutions génèrent un AttributeError lorsque la variable est None, vous recevrez dans ce cas une chaîne 'None'.

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

Si vous voulez le temps aussi, allez simplement avec

datetime.datetime.now().__str__()

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

0
Blauhirn