我正在尝试编写一个代码(Python)来检查输入的日期格式,然后将其转换为DD-MM-YYYY(如果输入格式与DD-MM-YYYY不同)。我已经在StackOverflow上检查了类似的问题,但他们都关注验证或转换格式,我不知道如何同时做两件事。我不能阻止其他格式的输入,因为它来自外部源。
到目前为止,我写了这个:
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:时间数据'05 -30-1960'与格式'%Y-%m-%d'不匹配”
有谁知道如何处理它?</ p>
答案 0 :(得分:1)
您可以在函数中构造逻辑,以便在datetime
循环中按顺序尝试多种for
格式。然后在特定格式成功时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'
答案 1 :(得分:0)
如果您可以使用 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