如何设置有效日期的条件?

时间:2017-09-13 21:54:19

标签: python

我正在重新格式化日期输入,其中一部分是使用try / except函数来踢出无效输入。部分原因是我需要为什么是/不是有效日期设定条件。例如,2017年没有闰年,因此输入'29 -02-2017'将无效。另一个例子是'31 / 09/2010',因为九月没有第31个。此外,由于当天的数字,'131/09/2020'也无效。你抓住了我的漂移。

一位同事提到他们创建了一份精心制作的清单,列出了一年中每个月的情况,但我想知道是否有办法简化这一过程。

1 个答案:

答案 0 :(得分:0)

如果您还想验证日期的格式(即确保它是单一格式,例如01/02/99),那么您可以使用

from datetime import datetime
datetime_object = datetime.strptime(your_date_string_here, '%d/%m/%Y')

如果日期有效,这将返回datetime对象,否则将失败。

>>> datetime_object = datetime.strptime('29/02/2017', '%d/%m/%Y')
ValueError: day is out of range for month

对于不同的格式,它也会失败,例如

>>> datetime_object = datetime.strptime('29-02-2017', '%d/%m/%Y')
Traceback (most recent call last):
ValueError: time data '29-02-2017' does not match format '%d/%m/%Y'

如果您希望能够处理多种格式,请查看dateutil包,它可以解析大多数日期格式。

from dateutil import parser
dt = parser.parse(your_date_string_here)

这将为无效日期抛出错误,但处理不同的格式,例如

>>> dt = parser.parse('29-02-2017')
Traceback (most recent call last):
ValueError: day is out of range for month