You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中String.compareTo为何两类测试场景均返回-1?

Flutter中String.compareTo()返回-1的原因分析

你测试的代码如下:

print("case 1>>>>> ");
print("02 Dec 2022".compareTo("24 Nov 2022"));

print("case 2>>>>> ");
print("24 Nov 2022".compareTo("24 Nov 2022"));

print("case 3>>>>> ");
print("23 Nov 2022".compareTo("24 Nov 2022"));

测试结果里case2返回0很直观——两个字符串完全一致,compareTo在字符串相等时返回0。而case1和case3都返回-1,核心原因是String类的compareTo是按Unicode码点逐字符做字典序比较,不是按日期语义比较。

具体场景拆解:

  • case3:"23 Nov 2022" vs "24 Nov 2022"
    逐字符对比到第二个字符时,'3'的Unicode码是51,'4'是52,51 < 52,所以前者被判定为小于后者,直接返回-1。

  • case1:"02 Dec 2022" vs "24 Nov 2022"
    第一个字符就出现差异:'0'的Unicode码是48,'2'是50,48 < 50,此时compareTo已经得出前者小于后者的结论,不会再往后比较月份部分。你可能误以为它会识别日期格式并按时间先后比较,但String的compareTo完全不具备语义解析能力,只看字符的Unicode顺序。

正确的日期比较方式

如果要按日期逻辑比较,需要先把字符串转换为DateTime对象,再调用DateTime的compareTo:

DateTime date1 = DateTime.parse("02 Dec 2022");
DateTime date2 = DateTime.parse("24 Nov 2022");
print(date1.compareTo(date2)); // 返回1,因为12月2日晚于11月24日

内容的提问来源于stack exchange,提问作者Jaimin Modi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 17:31:11