2015-03-31 63 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