2015-03-31 73 views
0

我想按日期和时间对日期和时间进行排序 - >例如,如果日期和时间是: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

在我的情况的顺序是这样的:

  1. 24/04/2015 14:00
  2. 24/04/2015 09:00
  3. 25/04/2015 15:00

它按日期排序,但忽略时间。

代码

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

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

我错过了什么吗?

UPDATE

日期是从MySQL数据库的到来,数据类型为DATE,因此它失去的确切时间和排序在该时间被忽略了。这也是我无法重现问题的原因,因为我总是手动设置Date对象以考虑时间。

+2

你使用什么具体的日期类? – 2015-03-31 09:18:08

+0

它的java.util.Date – Sasha 2015-03-31 09:19:16

+0

这应该是原样,你能提供一个可重现的问题的例子吗? – Tunaki 2015-03-31 09:20:55

回答

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)); 

} 

} 
+0

查看更新,是填充日期对象是问题,谢谢。 – Sasha 2015-04-01 07:00:47

0

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

+1

日期类的compareTo方法在millis中的使用时间 – 2015-03-31 09:31:59

+0

对,但是在比较日期和得到时间时得到的毫秒数有点不一样。无论如何比较毫秒可能会给出一些关于这个问题的好主意,也许可以用某种特殊的方式创建日期 – Stan 2015-03-31 09:40:05

+0

检查日期类中的compareTo的这种实现方法public int compareTo(Date anotherDate){this.width = 1000; long“thisTime = getMillisOf(this); long anotherTime = getMillisOf(anotherDate); return(thisTime 2015-03-31 09:46:26