如何将提取的字符串日期转换为可与当前日期比较的格式?
问题描述
我用正则表达式从字符串中提取出以下日期:
matches = ['10 October 2019', '20 October 2019', '10 October 2019', '25 October 2019']
其中matches[0]和matches[2]是任务分配日期,matches[1]和matches[3]是任务截止日期。我需要检查任务是否逾期,即判断matches[1]和matches[3]是否早于当前日期。
我尝试了以下代码:
index = 0 for random_value in range(0, len(matches)/2): assert(matches[index]> date.today()) index += 2
但出现错误:
TypeError: '>' not supported between instances of 'str' and 'datetime.date'
请问如何将matches[index]转换为可与当前日期比较的格式?
解决方法
要解决这个问题,你需要把字符串格式的日期转换为datetime.date对象,才能和date.today()进行比较。具体步骤如下:
- 导入所需模块:
from datetime import datetime, date
利用
datetime.strptime()方法解析字符串日期。你的日期格式是"日 完整月份名 年",对应的格式字符串为"%d %B %Y":%d:两位数字表示的日期(如10、20)%B:完整的月份名称(如October)%Y:四位数字表示的年份(如2019)
修改循环代码,修正索引并完成日期转换与比较:
# 截止日期从索引1开始,每次步长2 index = 1 # 用整数除法避免浮点数问题 for _ in range(len(matches) // 2): # 将字符串日期转换为date对象 deadline = datetime.strptime(matches[index], "%d %B %Y").date() # 检查是否逾期(若截止日期早于当前日期则触发断言) assert deadline >= date.today(), "任务已逾期" index += 2
注意事项:
- 原代码中初始索引设为
0,实际检查的是任务分配日期而非截止日期,需改为1才能正确对应目标日期。 - Python3中
len(matches)/2会返回浮点数,使用//进行整数除法可避免range()函数报错。 - 格式字符串必须与日期字符串的格式完全匹配,若月份是缩写(如
Oct),需将%B替换为%b。
内容的提问来源于stack exchange,提问作者theramannoodle
相关产品推荐
相关产品推荐

