J'ai une méthode python qui accepte une entrée de date sous forme de chaîne .
Comment ajouter une validation pour m'assurer que la chaîne de date transmise à la méthode est dans le fichier ffg. format:
'YYYY-MM-DD'
si ce n'est pas le cas, la méthode devrait générer une sorte d'erreur
Réponses:
la source
La bibliothèque Python
dateutil
est conçue pour cela (et plus encore). Il le convertira automatiquement endatetime
objet pour vous et lèvera unValueError
s'il ne le peut pas.Par exemple:
Cela déclenche un
ValueError
si la date n'est pas formatée correctement:dateutil
est également extrêmement utile si vous commencez à avoir besoin d'analyser d'autres formats à l'avenir, car il peut gérer intelligemment les formats les plus connus et vous permet de modifier vos spécifications: desdateutil
exemples d'analyse .Il gère également les fuseaux horaires si vous en avez besoin.
Mise à jour basée sur les commentaires :
parse
accepte également l'argument mot-clédayfirst
qui contrôle si le jour ou le mois doit venir en premier si une date est ambiguë. La valeur par défaut est False. Par exemplela source
parse('13/12/2001')
"13 décembre" maisparse('11/12/2001')
"12 novembre" (le premier résultat suggérerait ici "11 décembre").parse
prend en fait undayfirst
argument de mot - clé qui vous permet de contrôler cela.parse('11/12/2001', dayfirst=True)
retournera "11 décembre" La valeur par défaut de dateutil estdayfirst=False
datetutil.parser.parse()
accepte trop de formats d'heure (vous pourriez trouver d'autres exemples avec une entrée ambiguë). Si vous souhaitez valider que votre entrée est au format AAAA-MM-JJ, laparse()
fonction n'est pas le bon outil..parse()
retourner la chaîne de format en plus de l'datetime
objet?Je pense que la fonction de validation complète devrait ressembler à ceci:
Exécuter juste
n'est pas suffisant car la méthode strptime ne vérifie pas que le mois et le jour du mois sont des nombres décimaux remplis de zéro. Par exemple
sera exécuté sans erreur.
la source
datetime.strptime(date_text, "%Y-%m-%d")
?.. cela lève un
ValueError
s'il reçoit un format incompatible...si vous traitez beaucoup de dates et d'heures (dans le sens des objets datetime, par opposition aux flottants d'horodatage unix), c'est une bonne idée de regarder dans le module pytz, et pour le stockage / db, de tout stocker en UTC .
la source
C'est le moyen le plus simple:
la source