首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >日期验证和到欧洲格式Python的转换

日期验证和到欧洲格式Python的转换
EN

Stack Overflow用户
提问于 2018-06-11 03:05:55
回答 2查看 3.8K关注 0票数 1

我正在尝试编写代码(Python),它将检查输入的日期格式,然后将其转换为DD-MM-YYYY (如果输入格式不同于DD-MM-YYYY)。我在StackOverflow上检查过类似的问题,但它们都与验证或转换格式有关,我不知道如何同时做这两件事。我不能阻止其他格式的输入,因为它来自外部来源。

到目前为止,我写了以下内容:

代码语言:javascript
复制
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“条件在任何其他情况下都满足- crashes,而不是检查所有elif条件时,它才有效。错误信息如下:

"ValueError:时间数据'05-30-1960‘与格式’%Y-%m-%d‘不匹配“

有谁知道怎么处理它吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-11 04:35:55

您可以在函数中构建逻辑,以便在for循环中按顺序尝试几种datetime格式。然后在特定格式成功时执行return

此解决方案仅使用标准库中的datetimetry / except来捕获不成功的尝试。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-06-11 04:00:13

如果您可以使用。

演示:

代码语言:javascript
复制
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 )

输出:

代码语言:javascript
复制
30-05-1960
30-05-1960
30-05-1960
30-05-1960
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50787134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档