日期验证和转换为欧洲格式 Python
Date validation and conversion to European format Python
我正在尝试编写代码 (Python) 来检查输入的日期格式,然后将其转换为 DD-MM-YYYY(如果输入格式不同于 DD-MM-YYYY)。我在 Whosebug 上检查过类似的问题,但它们都与验证或转换格式有关,我不知道如何同时进行。我无法阻止其他格式的输入,因为它来自外部源。
到目前为止我写了这个:
import datetime
YearOfBirthString = '05-30-1960'
if YearOfBirthString != '':
if datetime.datetime.strptime(YearOfBirthString, '%d-%m-%Y'):
print(YearOfBirthString)
elif datetime.datetime.strptime(YearOfBirthString, '%Y-%m-%d'):
correctDate = datetime.datetime.strptime(YearOfBirthString, '%Y-%m-%d').strftime('%d-%m-%Y')
print(correctDate)
elif datetime.datetime.strptime(YearOfBirthString, '%m-%d-%Y'):
correctDate = datetime.datetime.strptime(YearOfBirthString, '%m-%d-%Y').strftime('%d-%m-%Y')
print(correctDate)
elif datetime.datetime.strptime(YearOfBirthString, '%Y-%d-%m'):
correctDate = datetime.datetime.strptime(YearOfBirthString, '%Y-%d-%m').strftime('%d-%m-%Y')
print(correctDate)
else:
print('Nuffin')
else:
print('Nuffin')
它仅在满足第一个 "If" 条件时起作用-在任何其他情况下都会崩溃,而不是检查所有 elif 条件。报错信息如下:
"ValueError: time data '05-30-1960' does not match format '%Y-%m-%d'"
有人知道怎么处理吗?
如果可以的话dateutil.
演示:
from dateutil.parser import parse
import datetime
YearOfBirthString = ['05-30-1960', '1960-05-30', '30-05-1960', '1960-30-05']
for date in YearOfBirthString:
try:
print( parse(date).strftime('%d-%m-%Y') )
except:
cDate = datetime.datetime.strptime(date, '%Y-%d-%m').strftime('%d-%m-%Y')
print( cDate )
输出:
30-05-1960
30-05-1960
30-05-1960
30-05-1960
您可以在一个函数中构造您的逻辑,以便在 for
循环中按顺序尝试多个 datetime
格式。然后 return
当特定格式成功时。
此解决方案仅涉及来自标准库的 datetime
和 try
/ except
以捕获不成功的尝试。
from datetime import datetime
YearOfBirthString = '05-30-1960'
def converter(s, format_list, format_output):
for date_format in format_list:
try:
return datetime.strptime(s, date_format).strftime(format_output)
except ValueError:
continue
return 'Nuffin'
res = converter(YearOfBirthString,
format_list=['%d-%m-%Y', '%Y-%m-%d', '%m-%d-%Y', '%Y-%d-%m'],
format_output='%d-%m-%Y')
# '30-05-1960'
我正在尝试编写代码 (Python) 来检查输入的日期格式,然后将其转换为 DD-MM-YYYY(如果输入格式不同于 DD-MM-YYYY)。我在 Whosebug 上检查过类似的问题,但它们都与验证或转换格式有关,我不知道如何同时进行。我无法阻止其他格式的输入,因为它来自外部源。
到目前为止我写了这个:
import datetime
YearOfBirthString = '05-30-1960'
if YearOfBirthString != '':
if datetime.datetime.strptime(YearOfBirthString, '%d-%m-%Y'):
print(YearOfBirthString)
elif datetime.datetime.strptime(YearOfBirthString, '%Y-%m-%d'):
correctDate = datetime.datetime.strptime(YearOfBirthString, '%Y-%m-%d').strftime('%d-%m-%Y')
print(correctDate)
elif datetime.datetime.strptime(YearOfBirthString, '%m-%d-%Y'):
correctDate = datetime.datetime.strptime(YearOfBirthString, '%m-%d-%Y').strftime('%d-%m-%Y')
print(correctDate)
elif datetime.datetime.strptime(YearOfBirthString, '%Y-%d-%m'):
correctDate = datetime.datetime.strptime(YearOfBirthString, '%Y-%d-%m').strftime('%d-%m-%Y')
print(correctDate)
else:
print('Nuffin')
else:
print('Nuffin')
它仅在满足第一个 "If" 条件时起作用-在任何其他情况下都会崩溃,而不是检查所有 elif 条件。报错信息如下:
"ValueError: time data '05-30-1960' does not match format '%Y-%m-%d'"
有人知道怎么处理吗?
如果可以的话dateutil.
演示:
from dateutil.parser import parse
import datetime
YearOfBirthString = ['05-30-1960', '1960-05-30', '30-05-1960', '1960-30-05']
for date in YearOfBirthString:
try:
print( parse(date).strftime('%d-%m-%Y') )
except:
cDate = datetime.datetime.strptime(date, '%Y-%d-%m').strftime('%d-%m-%Y')
print( cDate )
输出:
30-05-1960
30-05-1960
30-05-1960
30-05-1960
您可以在一个函数中构造您的逻辑,以便在 for
循环中按顺序尝试多个 datetime
格式。然后 return
当特定格式成功时。
此解决方案仅涉及来自标准库的 datetime
和 try
/ except
以捕获不成功的尝试。
from datetime import datetime
YearOfBirthString = '05-30-1960'
def converter(s, format_list, format_output):
for date_format in format_list:
try:
return datetime.strptime(s, date_format).strftime(format_output)
except ValueError:
continue
return 'Nuffin'
res = converter(YearOfBirthString,
format_list=['%d-%m-%Y', '%Y-%m-%d', '%m-%d-%Y', '%Y-%d-%m'],
format_output='%d-%m-%Y')
# '30-05-1960'