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 agrego esto y de repente todo se vuelve "inestable". 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 cita simple 2008-11-22
?
str()
(a cada elemento de la lista), porque eso es exactamente lo queprint
implícitamente hizo a sutoday
objeto solo .Respuestas:
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 que usa "print" se puede obtener usando la
str()
función. Es la mayoría de las veces el formato legible por humanos más común y se utiliza para facilitar la visualización. Entoncesstr(datetime.datetime(2008, 11, 22, 19, 53, 42))
te 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 usando la
repr()
función y es útil para saber qué tipo de datos está manipulando mientras está desarrollando o depurando.repr(datetime.datetime(2008, 11, 22, 19, 53, 42))
le da'datetime.datetime(2008, 11, 22, 19, 53, 42)'
.Lo que sucedió es que cuando imprimiste la fecha usando "imprimir", se usó
str()
para que pudieras ver una bonita cadena de fecha. Pero cuando imprimiómylist
, imprimió una lista de objetos y Python intentó representar el conjunto de datos, utilizandorepr()
.El Cómo: ¿qué quieres hacer con eso?
Bueno, cuando manipulas fechas, sigue usando los objetos de fecha todo el tiempo. Obtuvieron miles de métodos útiles y la mayoría de las API de Python esperan que las fechas sean objetos.
Cuando desee mostrarlos, simplemente utilícelos
str()
. En Python, la buena práctica es lanzar explícitamente todo. Entonces, cuando sea hora de imprimir, obtenga una representación de cadena de su fecha usandostr(date)
.Una última cosa. Cuando trataste de imprimir las fechas, imprimiste
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:
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, usando tu código
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
strftime()
métodostrftime()
espera un patrón de cadena que explique cómo desea formatear su fecha.P.EJ :
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
es el año dos últimos dígitos%Y
es todo el añoetc.
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 del método de cualquier cadena. En el caso de datetime, el formato es el mismo utilizado en strftime. Entonces puedes hacer lo mismo de arriba así:
La ventaja de este formulario es que también puede convertir otros objetos al mismo tiempo.
Con la introducción de los literales de cadena con formato (desde Python 3.6, 2016-12-23) esto se puede escribir
Localización
Las fechas pueden adaptarse automáticamente al idioma y la cultura local si las usa de la manera correcta, pero es un poco complicado. Tal vez para otra pregunta sobre SO (desbordamiento de pila) ;-)
fuente
inspect.isclass
para asegurarse). La gente tiende a decir "escribir" para los complementos y "clase" para el resto, pero eso no es importanteEditar:
Después de la sugerencia de Cees, también comencé a usar el tiempo:
fuente
datetime.datetime
?datetime import datetime
y luegoprint datetime().now().strftime("%Y-%m-%d %H:%M")
. Solo una diferencia de sintaxis.from datetime import date; date.today().strftime("%Y-%m-%d")
Todavía no me parece nada, pero eso es lo mejor sin élimport time
. Creo que el módulo de fecha y hora es para matemáticas de fecha.from datetime import datetime as dt
y ahora podemos jugar condt.now()
Los objetos date, datetime y time admiten un método strftime (formato) para crear una cadena que represente 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.
Esto es lo que podemos hacer con los módulos de fecha y hora en Python
Eso imprimirá algo como esto:
fuente
Use date.strftime. Los argumentos de formato se describen en la documentación .
Este es lo que querías:
Este tiene a Locale en cuenta. (hacer esto)
fuente
Esto es más corto:
fuente
fuente
O incluso
Fuera: '25 .12.2013
o
Fuera: 'Hoy - 25.12.2013'
Fuera: 'miércoles'
Fuera: '__main ____ 2014.06.09__16-56.log'
fuente
Respuesta simple -
fuente
Con el
datetime
formato de cadena específico del tipo (consulte la respuesta de nk9 usandostr.format()
.) En un literal de cadena con formato (desde Python 3.6, 2016-12-23):Las directivas de formato de fecha / hora no se documentan como parte de la Cadena de formato de sintaxis , sino más bien en
date
,datetime
ytime
'sstrftime()
documentación. Se basan en el Estándar C 1989, pero incluyen algunas directivas ISO 8601 desde Python 3.6.fuente
Necesita convertir el objeto de fecha y hora en una cadena.
El siguiente código funcionó para mí:
Avísame si necesitas más ayuda.
fuente
Odio la idea de importar demasiados módulos por conveniencia. Prefiero trabajar con el módulo disponible, que en este caso es
datetime
más que llamar a un nuevo módulotime
.fuente
a = datetime.datetime(2015, 04, 01, 23, 22).strftime('%Y-%m-%d %H:%M)
Tu puedes hacer:
fuente
Teniendo en cuenta el hecho de que pidió algo simple para hacer lo que quería, podría simplemente:
fuente
Para aquellos que desean una fecha basada en la configuración regional y que no incluyen la hora, use:
fuente
¿Es posible que desee agregarlo como una cadena?
fuente
Dado que
print today
devuelve lo que quiere, esto significa que el objeto de hoy__str__
función devuelve la cadena que está buscando.Entonces tú también puedes hacerlo
mylist.append(today.__str__())
.fuente
Puede usar easy_date para facilitarlo:
fuente
Un descargo de responsabilidad rápido para mi respuesta: solo he estado aprendiendo Python durante aproximadamente 2 semanas, por lo que de ninguna manera 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)
agregó su lista, agregó toda la cadenadatetime.date.today()
, que previamente había establecido como el valor de sutoday
variable, en lugar de solo agregartoday()
.Una solución simple, aunque tal vez no sea la que la mayoría de los codificadores usaría al trabajar con el módulo de fecha y hora, es cambiar el nombre de su variable.
Esto es lo que probé:
e imprime
yyyy-mm-dd
.fuente
Aquí se muestra cómo mostrar la fecha como (año / mes / día):
fuente
esto imprimirá el 6-23-2018 si eso es lo que quieres :)
fuente
De esta manera, puede obtener la fecha formateada como este ejemplo: 22-jun-2017
fuente
%b
usted obtendrá las primeras tres palabras del mes, y con%B
todo el mes. Ejemplo:datetime.datetime.now().strftime("%Y-%b-%d %H:%M:%S")
regresará '2018-Oct-04 09:44:08'No entiendo completamente, pero puedo usarlo
pandas
para obtener los tiempos en el formato correcto:Y:
Pero está almacenando cadenas pero es fácil de convertir:
fuente