如何在Python中比较日期?Python3中如何校验格式不同的相等日期时间?
如何在Python中比较不同格式的日期时间字符串?
嗨,这个问题我太熟悉了!你直接用==比较两个字符串肯定会输出no,因为a和b的字符序列本身就不一样——一个带前导零,一个不带,但它们对应的实际时间是相同的。正确的做法是把字符串转换成Python的datetime对象,再比较对象代表的时间值。
具体实现步骤
- 首先导入
datetime模块,这是Python处理日期时间的标准库 - 用
datetime.strptime()方法,把两个日期时间字符串都解析成datetime对象。这个方法会自动处理数字的前导零问题,不管输入是09还是9,只要格式符对应正确,都能解析出正确的时间 - 直接比较两个
datetime对象是否相等
代码示例
from datetime import datetime a = '2020-09-08 05:09:02' b = '2020-9-8 5:9:2' # 将字符串解析为datetime对象 dt_a = datetime.strptime(a, '%Y-%m-%d %H:%M:%S') dt_b = datetime.strptime(b, '%Y-%m-%d %H:%M:%S') if dt_a == dt_b: print("yes") else: print("no")
运行这段代码就会输出你想要的yes啦~
顺便说说日期时间的校验
如果需要校验一个字符串是不是合法的日期时间,同样可以用strptime方法——如果输入的字符串不符合格式或者日期时间本身不合法(比如月份是13号、日期是32号),它会抛出ValueError。我们可以用try-except来捕获这个异常,实现校验功能:
校验代码示例
from datetime import datetime def is_valid_datetime(date_str, format_str='%Y-%m-%d %H:%M:%S'): try: # 尝试解析字符串 datetime.strptime(date_str, format_str) return True except ValueError: # 解析失败,说明日期时间不合法 return False # 测试用例 print(is_valid_datetime('2020-09-08 05:09:02')) # 输出 True print(is_valid_datetime('2020-13-08 05:09:02')) # 输出 False(月份13不合法) print(is_valid_datetime('2020-9-8 5:9:2')) # 输出 True
总结
永远不要直接比较日期时间字符串!因为格式差异(前导零、分隔符不同等)会导致结果错误。转换成datetime对象是最稳妥的方式,既能准确比较时间值,还能顺便完成合法性校验。
内容的提问来源于stack exchange,提问作者pythonnewbie




