我想以这样的方式比较日期时间,以便获得已按日期升序和时间降序排序的最终结果值。 我怎样才能在使用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
答案 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 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]