私のアプリケーションでは、ユーザーは日付区切り記号のバリエーションを使用して dd/mm/yy の形式で日付を入力できます (区切り記号として /,- またはスペースを使用できるように)。また、4 桁の年または 2 桁の年を入力することもできます。また、月を表す 3 文字のコードまたは月を表す 2 桁のコードを入力することもできます。ユーザーから日付を取得したら、その形式が有効な日付形式であることを検証してから、「%d-%b-%Y」に変換します。以下の関数では、日付形式を検証していますが、01/12 2013、01-12 13、01 12/2013 などのすべての混合日付区切り形式を処理する方法がわかりません。これらの負荷が存在する可能性があります。
def validate_date(date_str):
formats = ['%d-%b-%Y', '%d-%b-%y', '%d-%m-%Y', '%d-%m-%y',
'%d/%m/%Y', '%d/%m/%y', '%d/%b/%Y', '%d/%b/%y',
'%d %m %Y', '%d %m %y', '%d %b %Y', '%d %b %y',
'%d%m%Y', '%d%b%y', '%d%b%Y', '%d %b/%Y']
data = None
for fmt in formats:
try:
dateValue = datetime.datetime.strptime(date_str, fmt).date()
data = dateValue
break
except ValueError:
pass
if data is None:
# invalid date format