493 votos

¿Cómo imprimir la fecha en un formato regular en Python?

Este es mi código:

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

Esto imprime: 2008-11-22, que es exactamente lo que quiero, pero...Tengo una lista a que estoy anexando y luego de repente todo va "wonky". Aquí está el código:

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

Esto imprime lo siguiente:

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

¿Cómo puedo obtener una simple cita como "2008-11-22"?

750voto

e-satis Puntos 146299

El por QUÉ: las fechas son objetos

En Python, las fechas son objetos. Por lo tanto, cuando usted manipular, manipular objetos, no cadenas, no las marcas de tiempo ni nada.

Cualquier objeto en Python tienen DOS representaciones de cadena:

  • Los regulares de la representación que es utilizado por "imprimir", se puede obtener utilizando el str() función. Es la mayoría del tiempo el más común de formato legible y se utiliza para facilitar la visualización. Así, str(datetime.datetime(2008, 11, 22, 19, 53, 42)) da '2008-11-22 19:53:42'.

  • La representación alternativa que se utiliza para representar los objetos de la naturaleza (como datos). Se puede obtener utilizando el repr() función y es útil saber qué tipo de datos que su manipulación durante el desarrollo o la depuración. repr(datetime.datetime(2008, 11, 22, 19, 53, 42)) da 'datetime.datetime(2008, 11, 22, 19, 53, 42)'.

Lo que sucedió es que cuando usted tiene impresa la fecha en que el uso de "imprimir", solía str() por lo que podría ver una bonita cadena de fecha. Pero cuando se han impreso mylist, que ha impreso una lista de objetos y Python intentado representar el conjunto de datos, utilizando repr().

El Cómo: ¿qué quieres hacer con eso?

Así, al manipular fechas, siga usando la fecha objetos de todo el largo de la manera. Llegaron miles de métodos útiles y la mayoría de la API de Python de esperar que las fechas de los objetos.

Cuando se desea mostrar de ellos, sólo tiene que utilizar str(). En Python, la buena práctica es explícitamente todo. Así que cuando es hora de impresión, obtener una representación de cadena de la fecha utilizando str(date).

Una última cosa. Cuando se trató de imprimir a las fechas, impreso mylist. Si desea imprimir una fecha, debe imprimir la fecha de los objetos, no su contenedor (de la lista).

Por EJEMPLO, usted desea imprimir todos los datos en una lista :

for date in mylist :
    print str(date)

Tenga en cuenta que en ese caso específico, incluso se puede omitir str() porque impresión utilizará para usted. Pero no debe convertirse en un hábito :-)

Caso práctico, utilizando el código

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

Avanzadas de formato de fecha

Fechas tiene un defecto de representación, pero puede que desee imprimir en un formato específico. En ese caso, usted puede obtener una representación de cadena personalizada utilizando la strftime() método.

strftime() espera una cadena patrón que explica cómo usted quiere formato de la fecha.

Por EJEMPLO :

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

Todas las letra después de un "%" representan un formato para algo :

  • %d es el número de día
  • %m es el número de mes
  • %b es la abreviatura del mes de
  • %y es el año dos últimos dígitos
  • %Y es el todo el año

etc

Eche un vistazo a la doc, usted no puede conocer a todos ellos.

Desde PEP3101, cada objeto puede tener su propio formato utilizado automáticamente por el método formato de cualquier cadena. En el caso del datetime, el formato es el mismo que se usa en strftime. Así que usted puede hacer lo mismo que el anterior como este:

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

La ventaja de esta forma es que usted también puede convertir otros objetos al mismo tiempo.

Fechas puede adaptarse automáticamente a la lengua y la cultura si los usa de la manera correcta, pero es un poco complicado. Tal vez para otra pregunta ;-)

244voto

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

Editar:

Después de la sugerencia de Cees, he comenzado usando tiempo así:

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

122voto

Transformer Puntos 169

La fecha, datetime y objetos de época todos apoyan un método strftime(format) para crear una cadena que representa el tiempo bajo el control de una cadena de formato explícito.

Aquí está una lista de los códigos de formato con su directiva y significado.

    %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.

Esto es lo que podemos hacer con los módulos datetime y el tiempo 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")

Mostrará algo como esto:

    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

65voto

Ali Afshar Puntos 22836

Uso date.strftime. Los argumentos de formato son descritos en la documentación.

Esto es lo que quería:

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

Éste toma Locale en cuenta. (hacer esto)

some_date.strftime('%c')

25voto

Cees Timmerman Puntos 1739

Esto es más corta:

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

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X