首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在python中验证日期字符串格式?

如何在python中验证日期字符串格式?
EN

Stack Overflow用户
提问于 2013-06-01 16:19:40
回答 5查看 282K关注 0票数 172

我有一个python方法,它接受将日期输入作为字符串进行

如何添加验证以确保传递给该方法的日期字符串在ffg中。格式:

代码语言:javascript
复制
'YYYY-MM-DD'

如果不是,方法应该引发某种类型的错误

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-06-01 16:23:42

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

Stack Overflow用户

发布于 2013-06-01 16:21:43

Python dateutil库就是为此(以及更多)而设计的。它会自动将其转换为datetime对象,如果不能,则会引发一个ValueError

举个例子:

代码语言:javascript
复制
>>> from dateutil.parser import parse
>>> parse("2003-09-25")
datetime.datetime(2003, 9, 25, 0, 0)

如果日期格式不正确,则会引发ValueError

代码语言:javascript
复制
>>> parse("2003-09-251")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/jacinda/envs/dod-backend-dev/lib/python2.7/site-packages/dateutil/parser.py", line 720, in parse
    return DEFAULTPARSER.parse(timestr, **kwargs)
  File "/Users/jacinda/envs/dod-backend-dev/lib/python2.7/site-packages/dateutil/parser.py", line 317, in parse
    ret = default.replace(**repl)
ValueError: day is out of range for month

如果将来需要解析其他格式,dateutil也非常有用,因为它可以智能地处理大多数已知格式,并允许您修改自己的规范:dateutil parsing examples

如果您需要,它还可以处理时区。

基于注释的更新parse还接受关键字参数dayfirst,该参数控制如果日期不明确,预计是日还是月。默认设置为False。例如。

代码语言:javascript
复制
>>> parse('11/12/2001')
>>> datetime.datetime(2001, 11, 12, 0, 0) # Nov 12
>>> parse('11/12/2001', dayfirst=True)
>>> datetime.datetime(2001, 12, 11, 0, 0) # Dec 11
票数 84
EN

Stack Overflow用户

发布于 2016-05-05 16:10:17

我认为完整的验证函数应该如下所示:

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

执行just

代码语言:javascript
复制
datetime.strptime(date_text, "%Y-%m-%d") 

这是不够的,因为strptime方法不检查月份和月份中的日期是否为填充零的十进制数字。例如

代码语言:javascript
复制
datetime.strptime("2016-5-3", '%Y-%m-%d')

将在没有错误的情况下执行。

票数 46
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16870663

复制
相关文章

相似问题

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