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 ;-)