You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Python中比较日期?Python3中如何校验格式不同的相等日期时间?

如何在Python中比较不同格式的日期时间字符串?

嗨,这个问题我太熟悉了!你直接用==比较两个字符串肯定会输出no,因为ab的字符序列本身就不一样——一个带前导零,一个不带,但它们对应的实际时间是相同的。正确的做法是把字符串转换成Python的datetime对象,再比较对象代表的时间值。

具体实现步骤

  1. 首先导入datetime模块,这是Python处理日期时间的标准库
  2. datetime.strptime()方法,把两个日期时间字符串都解析成datetime对象。这个方法会自动处理数字的前导零问题,不管输入是09还是9,只要格式符对应正确,都能解析出正确的时间
  3. 直接比较两个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

火山引擎 最新活动