5 ответов:
>>> import datetime >>> def validate(date_text): try: datetime.datetime.strptime(date_text, '%Y-%m-%d') except ValueError: raise ValueError("Incorrect data format, should be YYYY-MM-DD") >>> validate('2003-12-23') >>> validate('2003-12-32') Traceback (most recent call last): File "<pyshell#20>", line 1, in <module> validate('2003-12-32') File "<pyshell#18>", line 5, in validate raise ValueError("Incorrect data format, should be YYYY-MM-DD") ValueError: Incorrect data format, should be YYYY-MM-DD
The Python
dateutilбиблиотека предназначена для этого (и больше). Он автоматически преобразует это в
from datetime import datetime datetime.strptime(date_string, "%Y-%m-%d")..это поднимает
ValueErrorесли он получает несовместимый формат...если вы имеете дело с датами и временем много (в смысле объектов datetime, в отличие от временных меток unix), неплохо заглянуть в модуль pytz, а для хранения/db хранить все в UTC.
Я думаю, что полная функция проверки должна выглядеть так:
from datetime import datetime def validate(date_text): try: if date_text != datetime.strptime(date_text, "%Y-%m-%d").strftime('%Y-%m-%d'): raise ValueError return True except ValueError: return Falseзанятие
datetime.strptime(date_text, "%Y-%m-%d")недостаточно, потому что метод strptime не проверяет, что месяц и день месяца являются нулевыми десятичными числами. Например
datetime.strptime("2016-5-3", '%Y-%m-%d')будет выполняться без ошибок.
Comments