如何在Java中对字符串数组中的日期进行排序?

ude*_*lus 3 java arrays date simpledateformat

我想创建一个日期数组并对其进行排序.这就是我能够做到的,但这不是我所要求的.

   java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("dd-MM-yyyy");
   java.util.Date date1 = sdf.parse("05-03-2014");
   java.util.Date date2 = sdf.parse("23-08-2014");
   java.util.Date dates[] = {date1, date2};
   java.util.Arrays.sort(dates);
   System.out.println(java.util.Arrays.toString(dates));
Run Code Online (Sandbox Code Playgroud)

因为我有一个字符串数组"String dates [] = {"05-11-2014","23-08-2014","05-02-2013"};" 所以我必须在字符串数组中对日期进行排序.如何更改代码?

Mad*_*mer 7

更好的方法是将String数组转换为数组Date

Date[] arrayOfDates = new Date[dates.length];
for (int index = 0; index < dates.length; index++) {
    arrayOfDates[index] = sdf.parse(dates[index]);
}
Run Code Online (Sandbox Code Playgroud)

然后排序arrayOfDates,如果需要,使用SimpleDateFormat格式化结果返回到dates数组...

Arrays.sort(arrayOfDates);
for (int index = 0; index < dates.length; index++) {
    dates[index] = sdf.format(arrayOfDates[index]);
}
Run Code Online (Sandbox Code Playgroud)

如果dates数组中的一个或多个值是无效格式,则可以更好地控制应该执行的操作.

另一个"脏"的解决方案是使用一个自定义Comparator,将值转换为Date内联并比较它们.

如果你可以保证它的有效性,这是可以的dates,但是当你做不到时,它会开始分崩离析,例如......

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Comparator;
import java.util.logging.Level;
import java.util.logging.Logger;

public class DirtySort {

    public static void main(String[] args) {
        String dates[] = {"05-11-2014", "23-08-2014","05-02-2013"};
        Arrays.sort(dates, new Comparator<String>() {
            private SimpleDateFormat sdf = new java.text.SimpleDateFormat("dd-MM-yyyy");
            @Override
            public int compare(String o1, String o2) {
                int result = -1;

                try {
                    result = sdf.parse(o1).compareTo(sdf.parse(o2));
                } catch (ParseException ex) {
                    ex.printStackTrace();
                }

                return result;
            }
        });

        for (String date : dates) {
            System.out.println(date);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)