Comment imprimer la date dans un format régulier en Python?
C'est mon code:
import datetime
today = datetime.date.today()
print today
Cela imprime: 2008-11-22 ce qui est exactement ce que je veux mais....J'ai une liste à laquelle j'ajoute ceci et tout à coup tout va "wonky". Voici le code:
import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print mylist
Cela imprime ce qui suit:
[datetime.date(2008, 11, 22)]
Comment diable puis-je obtenir juste une date simple comme "2008-11-22"?
21 réponses
Le pourquoi: les dates sont des objets
En Python, les dates sont des objets. Par conséquent, lorsque vous les manipulez, vous manipulez des objets, pas des Chaînes, pas des horodatages ni rien.
Tout objet en Python a deux représentations de chaîne:
La représentation régulière qui est utilisée par "print", peut être get en utilisant la fonction
str()
. Il est la plupart du temps les plus courantes format lisible par l'homme et est utilisé pour faciliter l'affichage. Doncstr(datetime.datetime(2008, 11, 22, 19, 53, 42))
vous donne'2008-11-22 19:53:42'
.Représentation alternative utilisée pour représenter la nature de l'objet (en tant que données). Il peut être obtenu en utilisant la fonction
repr()
et est pratique pour savoir quel type de données vous manipulez pendant que vous développez ou déboguez.repr(datetime.datetime(2008, 11, 22, 19, 53, 42))
vous donne'datetime.datetime(2008, 11, 22, 19, 53, 42)'
.
Ce qui s'est passé est que lorsque vous avez imprimé la date en utilisant "print", il a utilisé str()
afin que vous puissiez 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 l'ensemble de données, en utilisant repr()
.
Le Comment: Que voulez-vous en faire?
Eh bien, lorsque vous manipulez des dates, continuez à utiliser les objets date tout au long du chemin. Ils ont obtenu des milliers de méthodes utiles et la plupart des API Python s'attendent à ce que les dates soient des objets.
Lorsque vous voulez les afficher, utilisez simplement str()
. En Python, la bonne pratique est de tout lancer explicitement. Donc, juste au moment où il est temps d " imprimer, obtenir une représentation de chaîne de votre date en utilisant 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 les objets date, pas leur conteneur (la liste).
Par exemple, vous voulez imprimer toute la date 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 cela ne devrait pas devenir une habitude: -)
Cas pratique, en utilisant 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
Date Avancée formatage
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 représentation de chaîne personnalisée en utilisant la méthode strftime()
.
strftime()
attend un modèle de chaîne expliquant comment vous voulez formater votre date.
Par Exemple:
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 de jour -
%m
est le numéro de mois -
%b
est l'abréviation du mois -
%y
est l'année deux derniers chiffres -
%Y
est la toute l'année
Etc
Jetez un oeil à la documentation officielle , ou référence rapide de McCutchen 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 ce formulaire est que vous pouvez également convertir d'autres objets en même temps.
Avec l'introduction de littéraux de chaîne formatés (depuis Python 3.6, 2016-12-23) cela peut être écrit comme
import datetime
f"{datetime.datetime.now():%Y-%m-%d}"
>>> '2017-06-15'
Localisation
Les Dates peuvent s'adapter automatiquement à la langue et à la culture locales si vous les utilisez correctement, mais c'est un peu compliqué. Peut-être pour une autre question sur SO (Stack Overflow); -)
import datetime
print datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
Modifier:
Après la suggestion Cees, j'ai également commencé à utiliser le temps:
import time
print time.strftime("%Y-%m-%d %H:%M")
Les objets date, datetime et time prennent tous en charge une méthode strftime(format) , pour créer une chaîne représentant l'heure sous le contrôle d'un format explicite chaîne.
Voici une liste des codes de format avec leur directive et leur signification.
%a Locale’s abbreviated weekday name.
%A Locale’s full weekday name.
%b Locale’s abbreviated month name.
%B Locale’s full month name.
%c Locale’s appropriate date and time representation.
%d Day of the month as a decimal number [01,31].
%f Microsecond as a decimal number [0,999999], zero-padded on the left
%H Hour (24-hour clock) as a decimal number [00,23].
%I Hour (12-hour clock) as a decimal number [01,12].
%j Day of the year as a decimal number [001,366].
%m Month as a decimal number [01,12].
%M Minute as a decimal number [00,59].
%p Locale’s equivalent of either AM or PM.
%S Second as a decimal number [00,61].
%U Week number of the year (Sunday as the first day of the week)
%w Weekday as a decimal number [0(Sunday),6].
%W Week number of the year (Monday as the first day of the week)
%x Locale’s appropriate date representation.
%X Locale’s appropriate time representation.
%y Year without century as a decimal number [00,99].
%Y Year with century as a decimal number.
%z UTC offset in the form +HHMM or -HHMM.
%Z Time zone name (empty string if the object is naive).
%% A literal '%' character.
C'est ce que nous pouvons faire avec les modules datetime et time en Python
import time
import datetime
print "Time in seconds since the epoch: %s" %time.time()
print "Current date and time: " , datetime.datetime.now()
print "Or like this: " ,datetime.datetime.now().strftime("%y-%m-%d-%H-%M")
print "Current year: ", datetime.date.today().strftime("%Y")
print "Month of year: ", datetime.date.today().strftime("%B")
print "Week number of the year: ", datetime.date.today().strftime("%W")
print "Weekday of the week: ", datetime.date.today().strftime("%w")
print "Day of year: ", datetime.date.today().strftime("%j")
print "Day of the month : ", datetime.date.today().strftime("%d")
print "Day of week: ", datetime.date.today().strftime("%A")
Qui va imprimer quelque chose comme ceci:
Time in seconds since the epoch: 1349271346.46
Current date and time: 2012-10-03 15:35:46.461491
Or like this: 12-10-03-15-35
Current year: 2012
Month of year: October
Week number of the year: 40
Weekday of the week: 3
Day of year: 277
Day of the month : 03
Day of week: Wednesday
Date D'utilisation.strftime. Les arguments de mise en forme sont décrits dans la documentation.
Celui-ci est ce que vous vouliez:
some_date.strftime('%Y-%m-%d')
Celui-ci prend en compte les paramètres régionaux. (faites ceci)
some_date.strftime('%c')
C'est plus court:
>>> import time
>>> time.strftime("%Y-%m-%d %H:%M")
'2013-11-19 09:38'
# convert date time to regular format.
d_date = datetime.datetime.now()
reg_format_date = d_date.strftime("%Y-%m-%d %I:%M:%S %p")
print(reg_format_date)
# some other date formats.
reg_format_date = d_date.strftime("%d %B %Y %I:%M:%S %p")
print(reg_format_date)
reg_format_date = d_date.strftime("%Y-%m-%d %H:%M:%S")
print(reg_format_date)
Sortie
2016-10-06 01:21:34 PM
06 October 2016 01:21:34 PM
2016-10-06 13:21:34
Ou même
from datetime import datetime, date
"{:%d.%m.%Y}".format(datetime.now())
Out: '25.12.2013
Ou
"{} - {:%d.%m.%Y}".format("Today", datetime.now())
Out: 'Aujourd'Hui-25.12.2013'
"{:%A}".format(date.today())
Out: 'Mercredi'
'{}__{:%Y.%m.%d__%H-%M}.log'.format(__name__, datetime.now())
Out: '__principaux____2014.06.09__16-56.le journal'
Avec type spécifique datetime
formatage de chaîne (voir la réponse de nk9 en utilisant str.format()
.) dans une chaîne littérale formatée (depuis Python 3.6, 2016-12-23):
>>> import datetime
>>> f"{datetime.datetime.now():%Y-%m-%d}"
'2017-06-15'
Les directives de format date/heure ne sont pas documentées dans le cadre de la syntaxe Format String mais plutôt dans date
, datetime
, et time
's strftime()
documentation. Ils sont basés sur la norme C de 1989, mais incluent certaines directives ISO 8601 depuis Python 3.6.
Vous devez convertir l'objet Date heure en une chaîne.
Le code suivant a fonctionné pour moi:
import datetime
collection = []
dateTimeString = str(datetime.date.today())
collection.append(dateTimeString)
print collection
Faites-moi savoir si vous avez besoin d'aide.
Vous pouvez l'ajouter en tant que chaîne?
import datetime
mylist = []
today = str(datetime.date.today())
mylist.append(today)
print mylist
from datetime import date
def time-format():
return str(date.today())
print (time-format())
Cela imprimera 6-23-2018 si c'est ce que vous voulez:)
Compte tenu du fait que vous avez demandé quelque chose de simple pour faire ce que vous vouliez, vous pourriez simplement:
import datetime
str(datetime.date.today())
Puisque le print today
renvoie ce que vous voulez, cela signifie que la fonction __str__
de l'objet today renvoie la chaîne que vous recherchez.
Donc vous pouvez faire mylist.append(today.__str__())
aussi bien.
Vous pouvez utiliser easy_date pour le rendre facile:
import date_converter
my_date = date_converter.date_to_string(today, '%Y-%m-%d')
Un avertissement rapide pour ma réponse-je n'apprends Python que depuis environ 2 semaines, donc je ne suis en aucun cas un expert; par conséquent, mon explication peut ne pas être la meilleure et je peux utiliser une terminologie incorrecte. De toute façon, ici il va.
J'ai remarqué dans votre code que lorsque vous avez déclaré Votre variable today = datetime.date.today()
vous avez choisi de nommer votre variable avec le nom d'une fonction intégrée.
Lorsque votre prochaine ligne de code mylist.append(today)
a ajouté votre liste, elle a ajouté la chaîne entière datetime.date.today()
, que vous aviez précédemment défini comme la valeur de votre variable today
, plutôt que d'ajouter simplement today()
.
Une solution simple, bien que peut-être pas celle que la plupart des codeurs utiliseraient lorsque vous travaillez avec le module datetime, est de changer le nom de votre variable.
Voici ce que j'ai essayé:
import datetime
mylist = []
present = datetime.date.today()
mylist.append(present)
print present
Et il imprime yyyy-mm-dd
.
Voici comment afficher la date (année/mois/jour) :
from datetime import datetime
now = datetime.now()
print '%s/%s/%s' % (now.year, now.month, now.day)
Je déteste l'idée d'importer trop de modules pour plus de commodité. Je préférerais travailler avec le module disponible qui dans ce cas est datetime
plutôt que d'appeler un nouveau module time
.
>>> a = datetime.datetime(2015, 04, 01, 11, 23, 22)
>>> a.strftime('%Y-%m-%d %H:%M')
'2015-04-01 11:23'
Je ne comprends pas complètement mais, peut utiliser pandas
pour obtenir des temps dans le bon format:
>>> import pandas as pd
>>> pd.to_datetime('now')
Timestamp('2018-10-07 06:03:30')
>>> print(pd.to_datetime('now'))
2018-10-07 06:03:47
>>> pd.to_datetime('now').date()
datetime.date(2018, 10, 7)
>>> print(pd.to_datetime('now').date())
2018-10-07
>>>
Et:
>>> l=[]
>>> l.append(pd.to_datetime('now').date())
>>> l
[datetime.date(2018, 10, 7)]
>>> map(str,l)
<map object at 0x0000005F67CCDF98>
>>> list(map(str,l))
['2018-10-07']
Mais il stocke des chaînes mais facile à convertir:
>>> l=list(map(str,l))
>>> list(map(pd.to_datetime,l))
[Timestamp('2018-10-07 00:00:00')]
import datetime
import time
months = ["Unknown","January","Febuary","Marchh","April","May","June","July","August","September","October","November","December"]
datetimeWrite = (time.strftime("%d-%m-%Y "))
date = time.strftime("%d")
month= time.strftime("%m")
choices = {'01': 'Jan', '02':'Feb','03':'Mar','04':'Apr','05':'May','06': 'Jun','07':'Jul','08':'Aug','09':'Sep','10':'Oct','11':'Nov','12':'Dec'}
result = choices.get(month, 'default')
year = time.strftime("%Y")
Date = date+"-"+result+"-"+year
print Date
De cette façon, vous pouvez obtenir la Date formatée comme cet exemple: 22-Jun-2017