2013-12-07 3 views
1

Я хочу, чтобы отсортировать раз в следующем порядке:TimeSorter: 12 часов часы

4:05 AM 
5:04 PM 
6:04 AM 
4:05 PM 
5:04 AM 
12:01 AM 
12:01 PM 

с использованием класса Time с

public int compareTo(Time t) 

методом.

if(this.getMeridians() != t.getMeridians()) 
    return this.getMeridians().compareTo(t.getMeridians()); 

для сортировки AM и PM, но я не знаю, как сортировать часы и минуты. Он находится в 12-часовой форме часов, поэтому 12:01 утра должен быть первым в списке. Чтобы сделать это, как мне пополнить compareTo (Time t)?

Должно быть так.

12:01 AM 
4:05 AM 
5:04 AM 
6:04 AM 
12:01 PM  
4:05 PM 
5:04 PM 
+3

Вы отправили этот точно такой же вопрос около часа или 2 назад. Я сказал вам [изменить] его, чтобы пометить его соответствующим языком, но похоже, что вы его удалили и вместо этого перепроверили. Пожалуйста, отметьте свой вопрос! –

+0

Это не язык - всегда помещайте свой вопрос на язык, например. C, C++, C#, VB, JS, Java, PHP и т. Д. –

+1

Молодцы. Теперь ваш вопрос получит намного больше информации. –

ответ

2
  1. разобрать эти строки для Date объектов
  2. ставят их в коллекции
  3. использования collection.sort() для сортировки коллекции

    import java.text.DateFormat; 
    import java.text.ParseException; 
    import java.text.SimpleDateFormat; 
    import java.util.ArrayList; 
    import java.util.Collections; 
    import java.util.Date; 
    import java.util.List; 
    import java.util.Locale; 
    
    String[] sArr = new String[] { "4:05 AM", "5:04 PM", "6:04 AM", 
         "4:05 PM", "5:04 AM", "12:01 AM", "12:01 PM"}; 
    
    DateFormat dateFormat = new SimpleDateFormat("hh:mm a", Locale.US); 
    List<Date> dates = new ArrayList<Date>(); 
    try { 
        for (String s : sArr) { 
         Date date = dateFormat.parse(s); 
         dates.add(date); 
        } 
    } catch (ParseException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
    } 
    
    Collections.sort(dates); 
    
    for (Date date : dates) { 
        System.out.println(dateFormat.format(date)); 
    } 
    
1

answer by Guy правильно.

Для удовольствия я сделал такой же код, но используя библиотеку Joda-Time 2.3.

В моем коде предполагается, что вы действительно хотите только раз, без дат. Таким образом, вы не получите обработку летнего времени или другие проблемы.

// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so. 
// import org.joda.time.*; 
// import org.joda.time.format.*; 

DateTimeFormatter formatter = DateTimeFormat.forPattern("hh:mm a"); 
// LocalTime time = formatter.parseLocalTime("4:05 PM"); 

// Create a list of org.joda.time.LocalTime instances, created by parsing strings. 
List list = new ArrayList(7); 
list.add(formatter.parseLocalTime("4:05 AM")); 
list.add(formatter.parseLocalTime("5:04 PM")); 
list.add(formatter.parseLocalTime("6:04 AM")); 
list.add(formatter.parseLocalTime("4:05 PM")); 
list.add(formatter.parseLocalTime("5:04 AM")); 
list.add(formatter.parseLocalTime("12:01 AM")); 
list.add(formatter.parseLocalTime("12:01 PM")); 
System.out.println("Unsorted: " + Arrays.toString(list.toArray())); 

// Sort that list. 
Collections.sort(list); 
System.out.println("Sorted: " + Arrays.toString(list.toArray())); 

При запуске ...

Unsorted: [04:05:00.000, 17:04:00.000, 06:04:00.000, 16:05:00.000, 05:04:00.000, 00:01:00.000, 12:01:00.000] 
Sorted: [00:01:00.000, 04:05:00.000, 05:04:00.000, 06:04:00.000, 12:01:00.000, 16:05:00.000, 17:04:00.000] 

Если вам нужен вывод значения снова AM Формат/PM, поиск StackOverflow.com Примеры использования форматтеров в Joda время для создания строк (» print ").

Смежные вопросы