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

新手上路,请多包涵

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

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

 'YYYY-MM-DD'

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

原文由 codemickeycode 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 300
2 个回答
>>> 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

原文由 jamylak 发布,翻译遵循 CC BY-SA 4.0 许可协议

Python dateutil 库专为此(以及更多)而设计。它会自动将其转换为 datetime 对象,并在不能时引发 ValueError

举个例子:

 >>> from dateutil.parser import parse
>>> parse("2003-09-25")
datetime.datetime(2003, 9, 25, 0, 0)

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

 >>> 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 解析示例

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

基于评论的更新parse 也接受关键字参数 dayfirst 如果日期不明确,它控制日期或月份是否先出现。这默认为 False。例如

>>> 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

原文由 Jacinda 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题