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'
.
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:
dt.strftime('format here')
; et'{: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.Une autre option:
import datetime
now=datetime.datetime.now()
now.isoformat()
# ouptut --> '2016-03-09T08:18:20.860968'
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'
type-specific formatting
peut également être utilisé:
_t = datetime.datetime(2012, 2, 23, 0, 0)
"{:%m/%d/%Y}".format(t)
_
Sortie:
_'02/23/2012'
_
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'
Vous pouvez convertir date/heure en chaîne.
published_at = "{}".format(self.published_at)
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
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'
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