Tengo una gran lista de fechas y fechas como esta:
Jun 1 2005 1:33PM
Aug 28 1999 12:00AM
Voy a volver a insertarlos en los campos de fecha y hora adecuados en una base de datos, así que necesito convertirlos en objetos de fecha y hora reales.
Esto está pasando por el ORM de Django, así que no puedo usar SQL para hacer la conversión en la inserción.
strptime()
te volverá loco, a menos que lo envuelvas. Vea mi respuesta, basada en la respuesta de Or Weis a estoRespuestas:
datetime.strptime
es la rutina principal para analizar cadenas en fechas y horas. Puede manejar todo tipo de formatos, con el formato determinado por una cadena de formato que le dé:La resultante
datetime
objeto es timezone-ingenuo.Enlaces:
Documentación de Python para
strptime
: Python 2 , Python 3Documentación de Python para cadenas de formato
strptime
/strftime
: Python 2 , Python 3strftime.org es también una muy buena referencia para strftime
Notas:
strptime
= "tiempo de análisis de cadena"strftime
= "hora de formato de cadena"fuente
date
lugar de unadatetime
, pasar a través lodatetime
maneja muy bien:datetime.strptime('Jun 1 2005', '%b %d %Y').date() == date(2005, 6, 1)
datetime
objeto con reconocimiento de zona horaria agregando esta línea en Python 3:from datetime import timezone; datetime_object = datetime_object.replace(tzinfo=timezone.utc)
"%Y-%m-%d %H:%M:%S"
from datetime import datetime
lugar de soloimport datetime
.Utilice la biblioteca de dateutil de terceros :
Puede manejar la mayoría de los formatos de fecha, incluido el que necesita analizar. Es más conveniente que
strptime
ya que puede adivinar el formato correcto la mayor parte del tiempo.Es muy útil para escribir pruebas, donde la legibilidad es más importante que el rendimiento.
Puedes instalarlo con:
fuente
Echa un vistazo a strptime en el módulo de tiempo . Es el inverso del tiempo de espera .
fuente
He reunido un proyecto que puede convertir algunas expresiones realmente ordenadas. Echa un vistazo a la cadena de tiempo .
Aquí hay algunos ejemplos a continuación:
pip install timestring
fuente
import timestring
timestring.Date('27 Mar 2014 12:32:29 GMT').year
Esta lib lo hizo TAN FÁCIL! Gracias.2017-02-01
. Lo mismo para el 5 / Feb / 2017 (sin embargo, lo hace correctamente el 5 / Feb / 2017); ninguno de esos dos últimos son formatos que he visto utilizados, que yo sepa, pero pensé en señalarlo de todos modos.Date("20180912")
alguna manera analiza un valor de2018-11-21
. Úselo bajo su propio riesgo.Recuerde esto y no necesita confundirse en la conversión de fecha y hora nuevamente.
Cadena al objeto datetime =
strptime
objeto de fecha y hora a otros formatos =
strftime
Jun 1 2005 1:33PM
es igual a
%b %d %Y %I:%M%p
entonces necesita strptime, es decir, convertir
string
aSalida
¿Qué sucede si tiene un formato diferente de fechas? Puede usar panda o dateutil.parse
Salida
fuente
%b
romperá si analiza una fecha en inglés en una máquina que no tiene una configuración regional en inglés?En Python> = 3.7.0,
para convertir la cadena AAAA-MM-DD en objeto de fecha y hora ,
datetime.fromisoformat
podría usarse.fuente
Muchas marcas de tiempo tienen una zona horaria implícita. Para asegurarse de que su código funcionará en cada zona horaria, debe usar UTC internamente y adjuntar una zona horaria cada vez que un objeto extraño ingrese al sistema.
Python 3.2+:
fuente
mktime()
primer método feo y, a veces, incorrecto ( durante las transiciones DST) si conoce el segundo método (datetime.strptime()
)? Si desea evitar una excepción durante un segundocalendar.timegm
(datetime(1970,1,1)+timedelta(seconds=timegm(time.strptime(..)))).replace(tzinfo=timezone(timedelta(-3)))
Aquí hay dos soluciones que usan Pandas para convertir fechas formateadas como cadenas en objetos datetime.date.
Tiempos
Y aquí está cómo convertir los ejemplos de fecha y hora originales del OP:
Hay muchas opciones para convertir de cadenas a marcas de tiempo de Pandas usando
to_datetime
, así que revise los documentos si necesita algo especial.Del mismo modo, las marcas de tiempo tienen muchas propiedades y métodos a los que se puede acceder además de
.date
fuente
Personalmente, me gusta la solución que usa el
parser
módulo, que es la segunda respuesta a esta pregunta y es hermosa, ya que no tiene que construir ningún literal de cadena para que funcione. PERO , un inconveniente es que es 90% más lento que la respuesta aceptadastrptime
.Mientras no lo hagas un millón de veces una y otra vez, sigo pensando que el
parser
método es más conveniente y manejará la mayoría de los formatos de tiempo automáticamente.fuente
Algo que no se menciona aquí y que es útil: agregar un sufijo al día. Desacoplé la lógica del sufijo para que pueda usarla para cualquier número que desee, no solo fechas.
fuente
fuente
Ejemplo de objeto de fecha y hora consciente de la zona horaria de Django.
Esta conversión es muy importante para Django y Python cuando tienes
USE_TZ = True
:fuente
Cree una pequeña función de utilidad como:
Esto es lo suficientemente versátil:
fuente
format
es una palabra reservada en python y no debe usarse como nombre de variable.Sería útil para convertir cadenas a fecha y hora y también con zona horaria
fuente
arrow ofrece muchas funciones útiles para fechas y horas. Este bit de código proporciona una respuesta a la pregunta y muestra que la flecha también es capaz de formatear fechas fácilmente y mostrar información para otras configuraciones regionales.
Ver http://arrow.readthedocs.io/en/latest/ para más información.
fuente
Puede usar easy_date para facilitarlo:
fuente
Si solo desea el formato de fecha, puede convertirlo manualmente pasando sus campos individuales como:
Puede pasar sus valores de cadena dividida para convertirlos en tipo de fecha como:
Obtendrá el valor resultante en formato de fecha.
fuente
También puedes consultar
dateparser
Instalar en pc:
Esta es, creo, la forma más fácil de analizar las fechas.
Código de muestra:
Salida:
fuente
Mira mi respuesta .
En los datos del mundo real, este es un problema real: formatos de fecha múltiples, incompatibles, incompletos, inconsistentes y multilingües / región, a menudo mezclados libremente en un conjunto de datos. No está bien que el código de producción falle, y mucho menos ir feliz como un zorro.
Tenemos que intentar ... capturar múltiples formatos de fecha y hora fmt1, fmt2, ..., fmtn y suprimir / manejar las excepciones (de
strptime()
) para todos aquellos que no coinciden (y en particular, evitar la necesidad de una escalera de prueba con sangría n-deep yukky) .. cláusulas de captura). De mi soluciónfuente
muestra la columna "Hora de fecha de inicio" y "Última hora de inicio de sesión", ambas son "objeto = cadenas" en el marco de datos
Al usar la
parse_dates
opciónread_csv
mencionada, puede convertir su cadena de fecha y hora al formato de fecha y hora de pandas.fuente