Java Data Structure How to - Sort a list of time strings








Question

We would like to know how to sort a list of time strings.

Answer

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
/*w w  w  .  j  a v  a 2 s .  co  m*/
public class Main {
  public static void main(String[] args) {
    List<String> times = Arrays.asList(new String[] { "03:00 AM", "12:30 PM",
        "16:15" });
    Collections.sort(times, new TimeStringComparator());
    System.out.println(times);
  }
}

class TimeStringComparator implements Comparator<String> {
  private DateFormat primaryFormat = new SimpleDateFormat("h:mm a");
  private DateFormat secondaryFormat = new SimpleDateFormat("H:mm");

  @Override
  public int compare(String time1, String time2) {
    return timeInMillis(time1) - timeInMillis(time2);
  }

  public int timeInMillis(String time) {
    return timeInMillis(time, primaryFormat);
  }

  private int timeInMillis(String time, DateFormat format) {
    try {
      Date date = format.parse(time);
      return (int) date.getTime();
    } catch (ParseException e) {
      if (format != secondaryFormat) {
        return timeInMillis(time, secondaryFormat);
      } else {
         System.out.println(e);
         return -1;
      }
    }
  }

}

The code above generates the following result.