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
dateutilestá diseñada para esto (y más). Automáticamente convertirá esto en undatetimeobjeto para usted y elevará unValueErrorsi no puede.Como ejemplo:
Esto aumenta un
ValueErrorsi la fecha no está formateada correctamente:dateutilTambié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:dateutilanálisis de ejemplos .También maneja zonas horarias si lo necesita.
Actualización basada en comentarios :
parsetambién acepta el argumento de la palabra clavedayfirstque 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í).parseen realidad toma undayfirstargumento 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=Falsedatetutil.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 deldatetimeobjeto?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
ValueErrorsi 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