使用Java中的比较器比较日期

时间:2014-01-31 14:09:08

标签: java android jodatime

我想以这样的方式比较日期时间,以便获得已按日期升序和时间降序排序的最终结果值。 我怎样才能在使用Joda-Time库的java中实现这一点?

数据:

01/31 5:50
01/31 5:40
01/30 2:20

结果

01/31 5:40
01/31 5:50
01/30 2:20

3 个答案:

答案 0 :(得分:0)

一个简单的TreeSet(假设您有不同的日期)使用比较器比较每个日期的dateTime.getMillis()就行了。

更好的是,为什么不直接使用这个“开箱即用”Comparator;)
由您来实现您想要的确切逻辑。 (上升,后代,无论如何)

答案 1 :(得分:0)

编写一个新比较器并将其传递给Arrays.sort()完成工作,例如

    Arrays.sort(Your_JODO_time_array, new Comparator<Date>(){

        @Override
        public int compare(Date o1, Date o2) {
            Calendar c1 = Calendar.getInstance();
            c1.setTime(o1);
            c1.set(Calendar.HOUR, 0);
            c1.set(Calendar.MINUTE, 0);
            c1.set(Calendar.SECOND, 0);
            c1.set(Calendar.MILLISECOND, 0);
            Date t1 = c1.getTime();
            c1.setTime(o2);
            c1.set(Calendar.HOUR, 0);
            c1.set(Calendar.MINUTE, 0);
            c1.set(Calendar.SECOND, 0);
            c1.set(Calendar.MILLISECOND, 0);
            Date t2 = c1.getTime();

            if(t1.compareTo(t2) != 0)
                return t1.compareTo(t2)*-1;
            else{
                c1.setTime(o1);
                c1.set(Calendar.YEAR, 0);
                c1.set(Calendar.MONTH, 0);
                c1.set(Calendar.DATE, 0);
                t1 = c1.getTime();
                c1.setTime(o2);
                c1.set(Calendar.YEAR, 0);
                c1.set(Calendar.MONTH, 0);
                c1.set(Calendar.DATE, 0);
                t2 = c1.getTime();
                return t1.compareTo(t2);
            }
        }

    });

答案 2 :(得分:0)

Joda-Time轻松

在Joda-Time中排序非常简单。只是一个单行!

Joda-Time 2.3已经实现了标准Java Comparable interface使用的compareTo方法。如果您不熟悉,请参阅Java Tutorial

因此,只需将DateTime实例添加到订阅的Collection,例如List,然后调用静态sort方法。

epoch中存储的Unix time DateTime以来的毫秒用于比较。所以你不必担心时区。

// Usually better to specify time zone than rely on default.
DateTime now = new DateTime( DateTimeZone.forID( "Europe/Paris" ) );

List<DateTime> list = new ArrayList<DateTime>( 3 );
list.add( now );
list.add( now.plusWeeks( 1 ) );
list.add( now.minusWeeks( 1 ) );

System.out.println( "list: " + list );

// When sorted, the last item moves to first position.
java.util.Collections.sort( list );
System.out.println( "list sorted: " + list );

跑步时......

Running 2014-01-31T18:44:34.277-08:00
list: [2014-02-01T03:44:34.390+01:00, 2014-02-08T03:44:34.390+01:00, 2014-01-25T03:44:34.390+01:00]
list sorted: [2014-01-25T03:44:34.390+01:00, 2014-02-01T03:44:34.390+01:00, 2014-02-08T03:44:34.390+01:00]