¿Cómo imprimir una fecha en un formato regular?

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 la que le estoy adjuntando y de repente todo se vuelve “torpe”. 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 demonios puedo obtener solo una fecha simple como “2008-11-22”?

El POR QUÉ: las fechas son objetos

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

Cualquier objeto en Python tiene DOS representaciones de cadena:

  • La representación regular utilizada por “imprimir”, se puede obtener utilizando la función str() . Es la mayor parte del tiempo el formato legible por humanos más común y se usa para facilitar la visualización. Así que str(datetime.datetime(2008, 11, 22, 19, 53, 42)) le da '2008-11-22 19:53:42' .

  • La representación alternativa que se utiliza para representar la naturaleza del objeto (como datos). Se puede obtener utilizando la función repr() y es útil para saber qué tipo de datos está manipulando mientras desarrolla o depura. repr(datetime.datetime(2008, 11, 22, 19, 53, 42)) le ofrece 'datetime.datetime(2008, 11, 22, 19, 53, 42)' .

Lo que sucedió es que cuando imprimiste la fecha usando “imprimir”, usó str() para que pudieras ver una buena cadena de fecha. Pero cuando mylist , mylist una lista de objetos y Python intentó representar el conjunto de datos utilizando repr() .

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

Bueno, cuando manipules fechas, sigue usando los objetos de fecha durante todo el camino. Obtuvieron miles de métodos útiles y la mayoría de las API de Python esperan que las fechas sean objetos.

Cuando quieras mostrarlos, solo usa str() . En Python, la buena práctica es lanzar todo explícitamente. Entonces, cuando llegue el momento de imprimir, obtenga una representación en cadena de su fecha usando str(date) .

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

Por ejemplo, desea imprimir toda la fecha en una lista:

 for date in mylist : print str(date) 

Tenga en cuenta que en ese caso específico , incluso puede omitir str() porque print lo usará para usted. Pero no debería convertirse en un hábito 🙂

Caso práctico, utilizando su 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 

Formato de fecha avanzado

Las fechas tienen una representación predeterminada, pero es posible que desee imprimirlas en un formato específico. En ese caso, puede obtener una representación de cadena personalizada utilizando el método strftime() .

strftime() espera un patrón de cadena que explica cómo desea formatear su fecha.

P.EJ :

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

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

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

etc

Eche un vistazo a la documentación oficial , o la referencia rápida de McCutchen, no puede conocerlos todos.

Desde PEP3101 , cada objeto puede tener su propio formato utilizado automáticamente por el formato de método de cualquier cadena. En el caso de datetime, el formato es el mismo que se usa en tiempo de ejecución. Así que puedes hacer lo mismo que arriba de esta manera:

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

La ventaja de este formulario es que también puede convertir otros objetos al mismo tiempo.
Con la introducción de literales de cadena con formato (desde Python 3.6, 2016-12-23), esto se puede escribir como

 import datetime f"{datetime.datetime.now():%Y-%m-%d}" >>> '2017-06-15' 

Localización

Las fechas se pueden adaptar automáticamente a la lengua y cultura locales si las usa de la manera correcta, pero es un poco complicado. Tal vez para otra pregunta sobre SO (Stack Overflow) 😉

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

Editar:

Después de la sugerencia de Cees, también comencé a usar el tiempo:

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

Los objetos date, datetime y time son compatibles con un método strftime (formato), para crear una cadena que representa la hora bajo el control de una cadena de formato explícito.

Aquí hay 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 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") 

Eso imprimirá 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 

Utilice date.strftime. Los argumentos de formato se describen en la documentación .

Este es lo que querías:

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

Éste tiene en cuenta Locale. (hacer esto)

 some_date.strftime('%c') 

Esto es más corto:

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

SALIDA

 2016-10-06 01:21:34 PM 06 October 2016 01:21:34 PM 2016-10-06 13:21:34 

O incluso

 from datetime import datetime, date "{:%d.%m.%Y}".format(datetime.now()) 

Fuera: ’25 .12.2013

o

 "{} - {:%d.%m.%Y}".format("Today", datetime.now()) 

Fuera: ‘Hoy – 25.12.2013’

 "{:%A}".format(date.today()) 

Fuera: ‘miércoles’

 '{}__{:%Y.%m.%d__%H-%M}.log'.format(__name__, datetime.now()) 

Fuera: ‘__main ____ 2014.06.09__16-56.log’

Respuesta simple

 datetime.date.today().isoformat() 

Con el formato de cadena de datetime y datetime específico del tipo (consulte la respuesta de str.format() con str.format() .) En un literal de cadena con formato (desde Python 3.6, 2016-12-23):

 >>> import datetime >>> f"{datetime.datetime.now():%Y-%m-%d}" '2017-06-15' 

Las directivas de formato de fecha / hora no se documentan como parte de la syntax de la cadena de formato, sino en la documentación de date , datetime y time strftime() . Se basan en el estándar C de 1989, pero incluyen algunas directivas ISO 8601 desde Python 3.6.

Es necesario convertir el objeto de fecha y hora en una cadena.

El siguiente código funcionó para mí:

 import datetime collection = [] dateTimeString = str(datetime.date.today()) collection.append(dateTimeString) print collection 

Déjame saber si necesitas más ayuda.

Tu puedes hacer:

 mylist.append(str(today)) 

¿Es posible que desee agregarlo como una cadena?

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

Dado que la print today devuelve lo que desea, esto significa que la función __str__ del objeto today devuelve la cadena que está buscando.

Así que también puedes hacer mylist.append(today.__str__()) .

Odio la idea de importar demasiados módulos por conveniencia. Preferiría trabajar con el módulo disponible, que en este caso es datetime lugar de llamar a un nuevo módulo.

 >>> a = datetime.datetime(2015, 04, 01, 11, 23, 22) >>> a.strftime('%Y-%m-%d %H:%M') '2015-04-01 11:23' 
 from datetime import date def time-format(): return str(date.today()) print (time-format()) 

esto se imprimirá 6-23-2018 si eso es lo que quieres 🙂

Teniendo en cuenta el hecho de que pidió algo simple para hacer lo que quería, podría simplemente:

 import datetime str(datetime.date.today()) 

Puedes usar easy_date para hacerlo más fácil:

 import date_converter my_date = date_converter.date_to_string(today, '%Y-%m-%d') 

Un descargo de responsabilidad rápido para mi respuesta: solo he estado aprendiendo Python durante aproximadamente 2 semanas, por lo que no soy un experto; por lo tanto, mi explicación puede no ser la mejor y puedo usar una terminología incorrecta. De todos modos, aquí va.

Noté en su código que cuando declaró su variable today = datetime.date.today() eligió nombrar su variable con el nombre de una función incorporada.

Cuando su siguiente línea de código mylist.append(today) anexó su lista, anexó la cadena completa datetime.date.today() , que había establecido previamente como el valor de su variable today , en lugar de simplemente anexar today() .

Una solución simple, aunque tal vez no la mayoría de los codificadores usarían al trabajar con el módulo datetime, es cambiar el nombre de su variable.

Esto es lo que intenté:

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

y se imprime yyyy-mm-dd .

Aquí es cómo mostrar la fecha como (año / mes / día):

 from datetime import datetime now = datetime.now() print '%s/%s/%s' % (now.year, now.month, now.day) 

No entiendo completamente, pero puedo usar pandas para obtener horarios en el formato correcto:

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

Y:

 >>> l=[] >>> l.append(pd.to_datetime('now').date()) >>> l [datetime.date(2018, 10, 7)] >>> map(str,l)  >>> list(map(str,l)) ['2018-10-07'] 

Pero es almacenar cadenas pero fácil de 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 esta manera puede obtener la fecha con formato como este ejemplo: 22-Jun-2017