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"?

515
demandé sur NomadAlien 2008-11-22 21:37:07

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. Donc str(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); -)

781
répondu e-satis 2018-05-25 11:00:14
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")
254
répondu Daniel Magnusson 2018-02-06 12:54:59

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
128
répondu Transformer 2013-09-22 14:26:14

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')
66
répondu Ali Afshar 2014-06-04 09:06:54

C'est plus court:

>>> import time
>>> time.strftime("%Y-%m-%d %H:%M")
'2013-11-19 09:38'
25
répondu Cees Timmerman 2013-11-19 08:39:04
# 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
22
répondu Waqas Ali 2016-10-06 08:24: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'

20
répondu nk9 2014-06-09 13:58:31

Réponse Simple -

datetime.date.today().isoformat()
8
répondu Flame of udun 2015-02-01 13:23:22

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.

3
répondu handle 2017-06-15 13:07:26

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.

2
répondu Simon Johnson 2008-11-22 18:45:00

Vous pouvez l'ajouter en tant que chaîne?

import datetime 
mylist = [] 
today = str(datetime.date.today())
mylist.append(today) 
print mylist
1
répondu HanClinto 2008-11-22 18:45:26

Vous pouvez faire:

mylist.append(str(today))
1
répondu Igal Serban 2008-11-22 18:46:05
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:)

1
répondu Erix 2018-06-23 06:37:32

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())
1
répondu Ward Taye 2018-09-03 14:10:43

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.

0
répondu Ismail Elouafiq 2014-11-18 08:59:25

Vous pouvez utiliser easy_date pour le rendre facile:

import date_converter
my_date = date_converter.date_to_string(today, '%Y-%m-%d')
0
répondu Raphael Amoedo 2015-05-10 05:32:55

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.

0
répondu Mark S. 2016-04-20 03:38:54

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)
0
répondu Adrian Simon 2016-06-19 00:06:59

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'
0
répondu rickydj 2017-07-28 20:37:29

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')]
0
répondu U9-Forward 2018-10-07 06:17:50
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

-1
répondu tanmayee 2017-06-22 05:26:45