使用Comparator按日期和时间排序

时间:2015-03-31 09:16:34

标签: java sorting

我正在尝试按日期和时间对对象进行排序 - >例如,如果日期和时间是: 24/04/2015 14:00 & 24/04/2015 09:00 & 25/04/2015 15:00 顺序应为:

  1. 24/04/2015 09:00
  2. 24/04/2015 14:00
  3. 25/04/2015 15:00
  4. 在我的情况下,订单是这样的:

    1. 24/04/2015 14:00
    2. 24/04/2015 09:00
    3. 25/04/2015 15:00
    4. 按日期排序,但忽略时间。

      代码

              Collections.sort(myObjects, new Comparator<MyObject>(){
                  @Override 
                  public int compare(MyObject object1, MyObject object2) {
                      return object1.getDate().compareTo(object2.getDate());
                  }
              });
      
      myObject类的

      P.S。 getDate()方法是一个常规的getter,只返回一个java.util.Date对象。

      我错过了什么吗?

      更新

      日期来自MySQL DB,数据类型为DATE,因此它丢失了确切的时间,并且在排序期间忽略了TIME。这也是我无法重现问题的原因,因为我总是考虑时间手动设置Date对象。

2 个答案:

答案 0 :(得分:2)

我尝试正确使用代码及其排序。也许您可以比较并找出您填写日期对象的方式是否有任何问题

public class DateSorter {

public static void main(String[] args) {

    List<MyObject> myObjects = new ArrayList<MyObject>();

    Calendar cal = new GregorianCalendar();
    cal.set(2015, 4, 24, 14, 00);
    Date dt1 = cal.getTime();

    cal = new GregorianCalendar();
    cal.set(2015, 4, 24, 9, 00);
    Date dt2 = cal.getTime();

    cal = new GregorianCalendar();
    cal.set(2015, 4, 25, 15, 00);
    Date dt3 = cal.getTime();

    myObjects.add(new MyObject("1", dt1));
    myObjects.add(new MyObject("2", dt2));
    myObjects.add(new MyObject("3", dt3));

    Collections.sort(myObjects, new Comparator<MyObject>() {
        @Override
        public int compare(MyObject object1, MyObject object2) {
            return (int) (object1.getDate().compareTo(object2.getDate()));
        }
    });

    System.out.println(myObjects.get(0));
    System.out.println(myObjects.get(1));
    System.out.println(myObjects.get(2));

}

}

答案 1 :(得分:0)

尝试比较日期的毫秒值。 (getTime()方法)。