2015-03-31 3 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. Метод getDate() класса myObject - это регулярный getter, который просто возвращает объект java.util.Date.

Я что-то упустил?

UPDATE

Датой доносился из БД MySQL, тип данных DATE, поэтому теряла точное время и игнорировалась при сортировке. Это также является причиной того, что я не смог воспроизвести проблему, поскольку я всегда устанавливал объекты Date вручную с учетом времени.

+2

какой конкретный класс даты вы используете? –

+0

его java.util.Date – Sasha

+0

Это должно работать так, как есть, не могли бы вы представить воспроизводимый пример вашей проблемы? – Tunaki

ответ

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

См. Обновление, да, заселение объектов Date было проблемой, спасибо. – Sasha

0

Пробуйте сравнить значение по миллисекундам. (метод getTime()).

+1

сравнение класса датыТо время использования метода в миллисе –

+0

Правильно, но при получении миллисекунд при сравнении даты и при получении времени происходит немного разный поток. В любом случае сравнение миллисекунд может дать некоторое представление о проблеме, возможно, даты, созданные каким-то особым образом. – Stan

+0

проверить эту реализацию compareTo в классе даты public int compareTo (Date anotherDate) { long thisTime = getMillisOf (this); long anotherTime = getMillisOf (anotherDate); return (thisTime