如何验证UTC格式的日期字符串列表是否按日期正确排序
验证UTC日期字符串列表排序的方法
你给出的是ISO 8601标准格式的UTC时间字符串,该格式的特殊属性是:字符串的字典排序结果和实际时间的先后顺序完全一致,因此你可以选择直接比对字符串,或者转换为时间对象后比对两种方案,以下是Python的实现示例(和你的示例代码语法匹配):
方案1:直接字符串比对(高效,适合格式统一的场景)
不需要做类型转换,直接遍历列表比对相邻元素即可,你给出的示例列表是降序排列(最新时间排在最前),验证代码如下:
# 验证是否为降序排列(时间从新到旧) def is_desc_sorted(lst): return all(lst[i] >= lst[i+1] for i in range(len(lst)-1)) # 验证是否为升序排列(时间从旧到新) def is_asc_sorted(lst): return all(lst[i] <= lst[i+1] for i in range(len(lst)-1)) # 测试你的示例列表 test_list = ['2021-11-11T22:23:44.960Z', '2021-11-11T22:23:37.937Z', '2021-11-11T22:23:34.687Z', '2021-11-11T22:22:40.670Z'] print(is_desc_sorted(test_list)) # 输出:True print(is_asc_sorted(test_list)) # 输出:False
该方案的适用前提:
- 列表中所有字符串都是标准
YYYY-MM-DDTHH:mm:ss.sssZ格式,无格式差异 - 所有时间都是UTC时区,无其他时区偏移
方案2:转换为datetime对象比对(兼容性强,支持格式校验)
如果无法保证列表中所有字符串格式完全标准,建议先转换为datetime对象后再比对,同时可以顺便校验时间格式的合法性:
from datetime import datetime def is_desc_sorted(lst): # 将UTC字符串转换为标准datetime对象 dt_list = [datetime.fromisoformat(item.replace('Z', '+00:00')) for item in lst] return all(dt_list[i] >= dt_list[i+1] for i in range(len(dt_list)-1)) test_list = ['2021-11-11T22:23:44.960Z', '2021-11-11T22:23:37.937Z', '2021-11-11T22:23:34.687Z', '2021-11-11T22:22:40.670Z'] print(is_desc_sorted(test_list)) # 输出:True
如果列表中存在非法时间格式,该方法会直接抛出异常,适合需要同时校验格式和排序的场景。
内容的提问来源于stack exchange,提问作者user17397395
相关产品推荐
相关产品推荐

