首页 > 解决方案 > 自定义比较器不排序时间

问题描述

我正在做一个项目,我在自定义比较器中比较日期和时间。我实际上将日期与日期和时间连接起来。当我调试问题时,我意识到时间没有得到排序。这是我的比较器中的代码片段。

Date dateObject1= new Date();
Date dateObject2  = new Date();

try {
    dateObject1 = sdf.parse(date1  + "T" + time1);
    dateObject2 = sdf.parse(date2  + "T" + time2);
} catch (Exception e) { }

if (dateObject1.compareTo(dateObject2) > 0)
    return 1;
else if (dateObject1.compareTo(dateObject2) < 0)
    return -1;
else
    return 0; 

测试用例: 1. date1 - 2019-12-13 , date2 - 2019-12-13 time1 - 08:00:00, time2 - 12:00:00

当我调试问题时,我发现上面的测试用例返回 0。我不确定它为什么会发生,但我打算返回 -1 以便它按升序排序。请指教。

标签: javacomparator

解决方案


你的问题在这里

} catch (Exception e) { }

您初始化 2 个日期,这两个日期都被初始化为当前时间 ( System.currentTimeMillis())。

Date dateObject1= new Date();
Date dateObject2  = new Date();

然后你的解析失败了,但是你吞下了这个异常,所以你从来没有注意到它。

然后,您尝试对两个完全相同或相隔几毫秒的日期进行排序,但肯定与您尝试排序的实际时间戳无关。

检查异常,修复解析,然后它将起作用。


推荐阅读