Tengo un método python que acepta una entrada de fecha como una cadena .
¿Cómo agrego una validación para asegurarme de que la cadena de fecha que se pasa al método está en el ffg? formato:
'YYYY-MM-DD'
si no es así, el método debería generar algún tipo de error
Respuestas:
fuente
La biblioteca Python
dateutil
está diseñada para esto (y más). Automáticamente convertirá esto en undatetime
objeto para usted y elevará unValueError
si no puede.Como ejemplo:
Esto aumenta un
ValueError
si la fecha no está formateada correctamente:dateutil
También es extremadamente útil si comienza a necesitar analizar otros formatos en el futuro, ya que puede manejar los formatos más conocidos de manera inteligente y le permite modificar su especificación:dateutil
análisis de ejemplos .También maneja zonas horarias si lo necesita.
Actualización basada en comentarios :
parse
también acepta el argumento de la palabra clavedayfirst
que controla si se espera que el día o el mes sean los primeros si una fecha es ambigua. Esto predeterminado es False. P.ejfuente
parse('13/12/2001')
es "13 dic" peroparse('11/12/2001')
es "12 nov" (el primer resultado sugeriría "11 dic" aquí).parse
en realidad toma undayfirst
argumento de palabra clave que le permite controlar esto.parse('11/12/2001', dayfirst=True)
volverá el "11 de diciembre" el valor predeterminado de dateutil esdayfirst=False
datetutil.parser.parse()
acepta demasiados formatos de tiempo (podría encontrar otros ejemplos con entradas ambiguas). Si desea validar que su entrada está en formato AAAA-MM-DD, entonces laparse()
función es la herramienta incorrecta..parse()
devolver la cadena de formato además deldatetime
objeto?Creo que la función de validación completa debería verse así:
Ejecutando solo
no es suficiente porque el método strptime no verifica que el mes y el día del mes sean números decimales rellenados con ceros. Por ejemplo
Se ejecutará sin errores.
fuente
datetime.strptime(date_text, "%Y-%m-%d")
?... esto genera un
ValueError
si recibe un formato incompatible...si se trata mucho de fechas y horas (en el sentido de los objetos de fecha y hora, a diferencia de los flotantes de marca de tiempo de Unix), es una buena idea buscar en el módulo pytz y, para almacenamiento / db, almacenar todo en UTC .
fuente
Esta es la manera más fácil:
fuente