如何在Python中进行日期验证?
在本文中,我们将向您展示如何在Python中进行日期验证。现在我们来看看实现此任务的2种方法:
- 使用datetime.strptime()函数
-
使用dateutil.parser.parse()函数
方法1:使用datetime.strptime()函数
算法(步骤)
下面是要执行所需任务的算法/步骤:
- 使用import关键字导入 datetime (用于处理日期和时间)模块。
-
将日期输入为字符串,并创建一个变量来存储它。
-
将日期格式输入为字符串,并创建另一个变量来存储它。
-
使用 try-except 块来处理异常(在Python中,Try和Except语句用于处理这些错误。如果程序中没有错误,则try块将执行某些代码以检查错误。另一方面,如果程序在前述try块中遇到错误,则在except块中的代码将被执行)。
-
在try块内,将给定的日期字符串和日期格式作为参数传递给datetime类的strptime()函数(将字符串格式的时间戳转换为日期时间对象),并将结果保存在一个变量中。(了解更多关于Python日期和时间)
-
在try块内打印上述结果。如果没有错误,它会打印格式化的日期。
-
如果上述日期验证失败,则将执行except块。在except块内,如果 ValueError 出现,则打印相应的文本。
示例
以下程序使用strptime()函数返回给定日期是否有效。
# importing datetime module
import datetime
# input date
date_string = '2017-12-31'
# giving the date format
date_format = '%Y-%m-%d'
# using try-except blocks for handling the exceptions
try:
# formatting the date using strptime() function
dateObject = datetime.datetime.strptime(date_string, date_format)
print(dateObject)
# If the date validation goes wrong
except ValueError:
# printing the appropriate text if ValueError occurs
print("Incorrect data format, should be YYYY-MM-DD")
输出
在执行上述程序时,将会生成以下输出:
2017-12-31 00:00:00
您可以使用许多其他指令解析日期。以下是由 strptime() 的格式字符串支持的指令。
指令 | 含义 |
---|---|
%a | 本地化的缩写星期几名称。 |
%A | 本地化的完整星期几名称。 |
%b | 本地化的缩写月份名称。 |
%B | 本地化的完整月份名称。 |
%c | 本地化的适当日期和时间表示。 |
%d | 以十进制数字表示的月份中的某一天 [01,31]。 |
%H | 以十进制数字表示的小时(24小时制)[00,23]。 |
%I | 以十进制数字表示的小时(12小时制)[01,12]。 |
%j | 一年中的日期作为十进制数[001,366]。 |
%m | 月份作为十进制数[01,12]。 |
%M | 分钟作为十进制数[00,59]。 |
%p | 本地等同于AM或PM。 |
%S | 秒钟作为十进制数[00,61]。 |
%U | 一年中的周数(以星期日作为星期的第一天)作为十进制数[00,53]。新年之前的第一个星期日之前的所有天数都被视为第0周。 |
%w | 星期几作为十进制数[0(星期日),6]。 |
%W | 一年中的周数(以星期一作为星期的第一天)作为十进制数[00,53]。新年之前的第一个星期一之前的所有天数都被视为第0周。 |
%x | 区域设置的日期表示方法。 |
%X | 区域设置的时间表示方法。 |
%y | 年份,不带世纪部分,以十进制数字表示 [00,99]。 |
%Y | 年份,带有世纪部分,以十进制数字表示。 |
%Z | 时区名称(如果不存在时区,则不显示任何字符)。 |
%% | 一个字面上的 “%” 字符 |
方法 2:使用 dateutil.parser.parse() 函数
在这种方法中,我们使用一个单独的内置函数 dateutil.parser 来检查日期格式的有效性。这不需要日期格式合法。
算法(步骤)
- 使用 import 关键字,导入 parser 函数,从dateutil模块中导入。
解析器模块可以解析多种不同格式的日期时间字符串。在Python中,没有比dateutil这个包更好的用于解析日期和时间的工具。tz模块包含了查找时区所需的一切内容。当这些模块一起使用时,将字符串转换为带有时区信息的datetime对象相对简单。
- 将日期作为字符串输入并创建一个变量存储它。
-
打印所给的输入日期。
-
使用 try-except 块处理异常。在try块内部,使用parse()函数解析给定的日期字符串。如果给定的日期正确,则打印true。
-
如果日期不正确/无效,则执行except块的代码。如果给定的日期存在解析错误,则会引发 ** ValueError** ,所以except块处理 ** ValueError** 并打印一些文本以表明给定日期未经验证。
示例
以下程序使用parse()函数返回给定日期是否有效:
# importing parser from dateutil module
from dateutil import parser
# input date
date_string = '23-41-2021'
# printing the input date
print("Input Date:", date_string)
# using try-except blocks for handling the exceptions
try:
# parsing the date string using parse() function
# It returns true if the date is correctly formatted else it will go to except block
print(bool(parser.parse(date_string)))
# If the date validation goes wrong
except ValueError:
# printing the appropriate text if ValueError occurs
print("Incorrect data format")
输出
执行以上代码后,将生成以下输出结果:
Input Date: 23-41-2021
Incorrect data format
结论
在本文中,我们学习了使用两种不同方法验证给定日期的方法。我们还学习了strptime()函数支持的其他指令。