826 votes

Comment imprimer la date dans un format régulier en Python ?

Il s’agit de mon code :

Ceci affiche : 2008-11-22, qui est exactement ce que je veux, mais... J’ai une liste que je suis ajoutant cela et puis soudain tout se passe « bancal ». Voici le code :

Ceci affiche le texte suivant :

Comment diable puis-je obtenir juste une simple date comme « 2008-11-22 » ?

1105voto

e-satis Points 146299

Le POURQUOI: les dates sont les objets

En Python, les dates sont des objets. Par conséquent, lorsque vous manipuler, vous pouvez manipuler des objets, pas de chaînes, pas des horodateurs, ni quoi que ce soit.

N'importe quel objet en Python ont DEUX représentations de chaîne:

  • La représentation régulière qui est utilisé par "imprimer", peut-être obtenir de l'aide de l' str() fonction. Il est la plupart du temps les plus courantes format lisible par l'homme et est utilisé pour faciliter l'affichage. Donc, str(datetime.datetime(2008, 11, 22, 19, 53, 42)) vous donne '2008-11-22 19:53:42'.

  • L'alternative de la représentation qui est utilisé pour représenter la nature de l'objet (en tant que données). Il peut être obtenir l'aide de l' repr() fonction et est pratique pour savoir quel type de données de votre manipulation en développement ou de débogage. repr(datetime.datetime(2008, 11, 22, 19, 53, 42)) vous donne 'datetime.datetime(2008, 11, 22, 19, 53, 42)'.

Ce qui s'est passé, c'est que lorsque vous avez imprimé la date à l'aide de "print", il a utilisé str() ainsi, vous pouvez voir une belle chaîne de date. Mais lorsque vous avez imprimé mylist, vous avez imprimé une liste d'objets et Python essayé de représenter un ensemble de données, à l'aide de repr().

Comment le faire: que voulez-vous faire avec ça?

Eh bien, quand vous manipuler les dates, gardez à l'aide de la date d'objets tout à long de la voie. Ils ont obtenu des milliers de méthodes utiles et la plupart de l'API Python attendre les dates d'être des objets.

Lorsque vous souhaitez les afficher, il suffit d'utiliser str(). En Python, la bonne pratique consiste à convertir explicitement tout. Donc, juste quand il est temps d'imprimer, d'obtenir une représentation de chaîne de vous de date à l'aide de str(date).

Une dernière chose. Lorsque vous avez essayé d'imprimer les dates, vous avez imprimé mylist. Si vous souhaitez imprimer une date, vous devez imprimer la date d'objets, pas de leur conteneur (la liste).

E. G, que vous voulez imprimer toutes les données dans une liste :

for date in mylist :
    print str(date)

Notez que dans ce cas précis, vous pouvez omettre str() parce que l'impression va l'utiliser pour vous. Mais elle ne doit pas devenir une habitude :-)

Cas pratique, à l'aide de votre code

import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print mylist[0] # print the date object, not the container ;-)
2008-11-22

# It's better to always use str() because :

print "This is a new day : ", mylist[0] # will work
This is a new day : 2008-11-22

print "This is a new day : " + mylist[0] # will crash
cannot concatenate 'str' and 'datetime.date' objects

print "This is a new day : " + str(mylist[0]) 
This is a new day : 2008-11-22

Avancées de formatage de la date

Les Dates ont une représentation par défaut, mais vous pouvez les imprimer dans un format spécifique. Dans ce cas, vous pouvez obtenir une mesure de la chaîne de la représentation à l'aide de l' strftime() méthode.

strftime() s'attend à un modèle de chaîne d'expliquer comment vous souhaitez formater votre date.

E. G :

print today.strftime('We are the %d, %b %Y')
'We are the 22, Nov 2008'

Tous la lettre après un "%" représentent un format pour quelque chose :

  • %d est le numéro du jour
  • %m est le numéro du mois
  • %b est l'abréviation
  • %y l'année dernière à deux chiffres
  • %Y est toute l'année

etc

Jetez un oeil à la doc, vous ne pouvez pas les connaître tous.

Depuis PEP3101, chaque objet peut avoir son propre format utilisé automatiquement par la méthode format de n'importe quelle chaîne. Dans le cas de la date, le format est le même que dans strftime. Ainsi, vous pouvez faire la même chose que ci-dessus comme ceci:

print "We are the {:%d, %b %Y}".format(today)
'We are the 22, Nov 2008'

L'avantage de cette forme est que vous pouvez également convertir d'autres objets dans le même temps.

Dates peut automatiquement s'adapter à la langue et la culture locale si vous utilisez de la bonne façon, mais c'est un peu compliqué. Peut-être pour une autre question ;-)

427voto

Daniel Magnusson Points 2945
<pre><code></code><p><strong>Edit :</strong></p><p>Après la suggestion de Cees, j’ai commencé à utiliser temps ainsi :</p><pre><code></code></pre></pre>

203voto

Transformer Points 169

La date, datetime et objets de temps tous les prend en charge une méthode de strftime(format), pour créer une chaîne qui représente l’heure sous le contrôle d’une chaîne de format explicite.

Voici une liste des codes de format avec leur directive et leur signification.

C’est ce que nous pouvons faire avec les modules datetime et temps en Python

Qui affichera quelque chose comme ceci :

81voto

Ali Afshar Points 22836

Utiliser date.strftime. Les arguments de mise en forme sont décrites dans la documentation.

C’est ce que tu voulais :

Celui-ci tienne compte de paramètres régionaux. (faire)

49voto

Cees Timmerman Points 1739

C’est plus court :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X