Question Comment imprimer la date dans un format normal en Python?


C'est mon code:

import datetime
today = datetime.date.today()
print today

Cela imprime: 2008-11-22 qui est exactement ce que je veux MAIS .... J'ai une liste que je joins à cela et puis tout à coup tout va "foutu". Voici le code:

import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print mylist

Ceci imprime ce qui suit:

[datetime.date(2008, 11, 22)]

Comment diable puis-je obtenir une simple date comme "2008-11-22"?


493
2017-11-22 18:37


origine


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, ni des horodatages, ni rien.

Tout objet en Python a deux représentations de chaîne:

  • La représentation régulière utilisée par "print" peut être obtenue en utilisant str() fonction. C'est la plupart du temps le format lisible par l'homme le plus courant et est utilisé pour faciliter l'affichage. Alors str(datetime.datetime(2008, 11, 22, 19, 53, 42)) vous donne '2008-11-22 19:53:42'.

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

Qu'est-il arrivé est que lorsque vous avez imprimé la date en utilisant "imprimer", il a utilisé str() donc vous pouviez voir une belle chaîne de date. Mais quand vous avez imprimé mylist, vous avez imprimé une liste d'objets et Python a essayé de représenter l'ensemble des données, en utilisant repr().

Le comment: que voulez-vous faire avec ça?

Eh bien, lorsque vous manipulez des dates, continuez à utiliser les objets de date tout au long du chemin. Ils ont obtenu des milliers de méthodes utiles et la plupart des API Python attendent des dates comme des objets.

Lorsque vous voulez les afficher, utilisez simplement str(). En Python, la bonne pratique consiste à tout lancer explicitement. Donc, juste quand il est temps d'imprimer, obtenez une représentation sous forme 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 de date, pas leur conteneur (la liste).

E.G, vous voulez imprimer toute la date dans une liste:

for date in mylist :
    print str(date)

Notez que dans ce cas particulier, vous pouvez même omettre str() car l'impression l'utilisera 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

Mise en forme avancée de la date

Les dates ont une représentation par défaut, mais vous souhaiterez peut-être les imprimer dans un format spécifique. Dans ce cas, vous pouvez obtenir une représentation de chaîne personnalisée en utilisant strftime() méthode.

strftime() attend un modèle de chaîne expliquant comment vous souhaitez formater votre date.

PAR EXEMPLE :

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

Toute la lettre après un "%" représenter un format pour quelque chose:

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

etc

Jetez un oeil à la documentation officielle, ou Référence rapide de McCutchen vous ne pouvez pas tous les connaître.

Depuis PEP3101, chaque objet peut avoir son propre format utilisé automatiquement par le format de méthode de n'importe quelle chaîne. Dans le cas du datetime, le format est le même que celui utilisé dans strftime. Donc vous pouvez faire comme 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 de la bonne manière, mais c'est un peu compliqué. Peut-être pour une autre question sur SO (Stack Overflow) ;-)


750
2018-01-14 14:46



import datetime
print datetime.datetime.now().strftime("%Y-%m-%d %H:%M")

Modifier:

Après la suggestion de Cees, j'ai aussi commencé à utiliser le temps:

import time
print time.strftime("%Y-%m-%d %H:%M")

244
2017-09-22 14:26



Les objets date, datetime et time prennent tous en charge une méthode strftime (format), 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")

Cela 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

122
2017-11-22 18:56



Utilisez date.strftime. Les arguments de formatage sont décrit dans la documentation.

Celui-ci est ce que tu voulais:

some_date.strftime('%Y-%m-%d')

Celui-ci prend Locale en compte. (fais ceci)

some_date.strftime('%c')

65
2017-11-19 08:39



C'est plus court:

>>> import time
>>> time.strftime("%Y-%m-%d %H:%M")
'2013-11-19 09:38'

25
2017-10-06 08:24



# 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

21
2017-12-25 21:37



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: '__main ____ 2014.06.09__16-56.log'


20
2018-02-01 13:23



Réponse simple -

datetime.date.today().isoformat()

8
2018-06-15 13:07