判断日期的合法性,有两层含义,一是日期格式是否合法,二是格式合法后,其所表示的实际的那一天,是否真实存在!在python中,做这个合法性的判断,so easy!~~

我们需要用到datetime模块中的date。实现对日期合法性的判断,利用的就是python自带的合法性判断机制。

from datetime import date

用date(year,month,day)

创建date对象的时候,python自己就会判断输入日期的合法性,如果不合法会抛出异常。

>>> date(1234,11,1)
datetime.date(1234, 11, 1)
>>> date(2019,10,11)
datetime.date(2019, 10, 11)
>>> date(2019,10,32)
Traceback (most recent call last):
File "", line 1, in 
ValueError: day is out of range for month
>>> date(2019,-9,32)
Traceback (most recent call last):
File "", line 1, in 
ValueError: month must be in 1..12
>>> date(10000,-9,32)
Traceback (most recent call last):
File "", line 1, in 
ValueError: year 10000 is out of range

传入年月日,三个int,date()会自己判断是否合法有效,如果否,抛出ValueError异常。我们可以利用这个机制,自己写一个简单的判断函数:

>>> def isValidDate(year, month, day):
... try:
... date(year, month, day)
... except:
... return False
... else:
... return True
...

这个方法适合所有python3代码,兼容性更好。只是用这个方法可能需要写点代码得到三个int值。

用date.fromisoformat()

原理和上文一样,区别是,fromisoformat函数接收一个字符串参数,而不是int。另一个区别是,这个函数从python3.7才开始有提供。所以,存在一点兼容性的问题。

iso格式的日期,就是:YYYY-MM-DD

>>> def isValidDate(datestr):
... try:
... date.fromisoformat(datestr)
... except:
... return False
... else:
... return True
...

网络上有些同学用python写的判断日期合法性的代码,太复杂了,这些年月日的底层判断,python已经实现了。用本文介绍的方法,应该是最简单的。

-- EOF --