Python中如何比较时间字符串的大小?
time1 = "20181010" time2 = "20181012"
这两个时间比较大小,转为时间戳或字符串直接比较都有结果
我想问如果用简单方法(字符串)直接比较会不会有什么缺点(隐患)?
Python中如何比较时间字符串的大小?
11 回复
你要是能保证格式绝对都是 yyyymmdd 那么用字符串比较也没问题。
字符串比较的时候是从左往右逐个比较的 按照 ascii 值进行的。 不存在大数字比小数字 ascii 值小的情况。
但是就是格式有异常的,那就可能出错了。
from datetime import datetime
# 方法1:直接字符串比较(仅当格式为ISO标准时有效)
time_str1 = "2023-10-05 14:30:00"
time_str2 = "2023-10-05 15:45:00"
if time_str1 < time_str2:
print("方法1:字符串直接比较 - time_str1 更早")
# 方法2:转换为datetime对象比较(推荐)
def compare_time_str(str1, str2, fmt="%Y-%m-%d %H:%M:%S"):
dt1 = datetime.strptime(str1, fmt)
dt2 = datetime.strptime(str2, fmt)
if dt1 < dt2:
return f"{str1} 早于 {str2}"
elif dt1 > dt2:
return f"{str1} 晚于 {str2}"
else:
return f"时间相同"
# 示例比较
result = compare_time_str("2023-10-05 09:00:00", "2023-10-05 14:30:00")
print(f"方法2:{result}")
# 处理不同格式的时间字符串
result2 = compare_time_str("05/10/2023 09:00", "06/10/2023 14:30", fmt="%d/%m/%Y %H:%M")
print(f"自定义格式:{result2}")
# 批量比较示例
time_list = ["2023-10-05 08:00:00", "2023-10-05 10:30:00", "2023-10-05 09:15:00"]
sorted_times = sorted(time_list, key=lambda x: datetime.strptime(x, "%Y-%m-%d %H:%M:%S"))
print(f"排序结果:{sorted_times}")
核心要点:
- 如果时间字符串是ISO 8601标准格式(如"2023-10-05 14:30:00"),可以直接用字符串比较运算符(
<,>,==)进行字典序比较 - 更通用的做法是先用
datetime.strptime()将字符串转换为datetime对象,再进行比较操作 - 转换时需要明确指定时间字符串的格式(format),通过
fmt参数匹配 - 对于批量操作,可以用
sorted()配合转换函数进行排序
一句话建议: 统一转成datetime对象再比较最稳妥。
只是到日期直接字符串
格式有保障的话直接比较,没有的话还是先转一下比较好
可以先转化为 datetime.datetime,然后就可以计算差值,比较大小了
先做参数校验,再直接比较字符串,比较稳妥。
好的,感谢~
这种是不是 可以直接 int 比较了…
直接比较的缺陷是
比如 20180809
可以写成 2018809
这样比较就有可能出错了,
最好转成 datetime.datetime
格式有保证的话直接 int 就好了,甚至不考虑好读的话,可以 timestamp//86400 更短一点。
前一段时间我也做过比较,然后我就说一句,MS 的时间原点和 LINUX 的时间原点不是同一天。
如果你从 EXCEL 里提取日期,要考虑这个。

