Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中使用comparator比较日期_Java_Android_Jodatime - Fatal编程技术网

在Java中使用comparator比较日期

在Java中使用comparator比较日期,java,android,jodatime,Java,Android,Jodatime,我希望以这样一种方式比较日期时间,以获得按日期升序和时间降序排序的最终结果值。 如何使用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 一个简单的TreeSet(假设您有不同的日期)使用比较器比较每个日期的dateTime.getMillis(),就可以做到这一点 更好的是,为什么不直接使用这个“开箱即用”;) 由您来实现您想要的确切逻辑。(上升、下降,随便什么)编写一个新

我希望以这样一种方式比较日期时间,以获得按日期升序和时间降序排序的最终结果值。 如何使用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

一个简单的
TreeSet
(假设您有不同的日期)使用比较器比较每个日期的
dateTime.getMillis()
,就可以做到这一点

更好的是,为什么不直接使用这个“开箱即用”;)

由您来实现您想要的确切逻辑。(上升、下降,随便什么)

编写一个新的比较器并将其传递给数组

    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);
            }
        }

    });
Arrays.sort(你的_JODO_time_数组,新的比较器(){
@凌驾
公共整数比较(日期o1,日期o2){
Calendar c1=Calendar.getInstance();
c1.设定时间(o1);
c1.设置(日历小时,0);
c1.设置(日历分钟,0);
c1.设置(日历秒,0);
c1.设置(日历毫秒,0);
日期t1=c1.getTime();
c1.设定时间(o2);
c1.设置(日历小时,0);
c1.设置(日历分钟,0);
c1.设置(日历秒,0);
c1.设置(日历毫秒,0);
日期t2=c1.getTime();
如果(t1.与(t2)!=0相比)
返回t1。比较(t2)*-1;
否则{
c1.设定时间(o1);
c1.集合(日历年,0);
c1.设置(日历月,0);
c1.设置(日历日期,0);
t1=c1.getTime();
c1.设定时间(o2);
c1.集合(日历年,0);
c1.设置(日历月,0);
c1.设置(日历日期,0);
t2=c1.getTime();
返回t1.比较(t2);
}
}
});
在Joda时代轻松 在乔达时代,分类很容易。就一行

2.3已经实现了标准Java使用的
compareTo
方法。看看你是否不熟悉

因此,只需将DateTime实例添加到一个有序的实例中,例如,然后调用static
sort
方法

自存储在中的以来的毫秒数用于比较。所以你不必担心时区

//指定时区通常比依赖默认时区更好。
DateTime now=新的日期时间(DateTimeZone.forID(“欧洲/巴黎”);
列表=新的ArrayList(3);
列表。添加(现在);
添加(现在为plusWeeks(1));
增加(现在是第(1)周);
System.out.println(“列表:+list”);
//排序后,最后一项移动到第一个位置。
java.util.Collections.sort(列表);
System.out.println(“列表排序:“+list”);
当运行时

运行2014-01-31T18:44:34.277-08:00
列表:[2014-02-01T03:44:34.390+01:002014-02-08T03:44:34.390+01:002014-01-25T03:44:34.390+01:00]
已排序的列表:[2014-01-25T03:44:34.390+01:002014-02-01T03:44:34.390+01:002014-02-08T03:44:34.390+01:00]

您尝试过什么吗?我尝试过comparable,我只能先用最新日期对数据进行排序。我真正想要实现的是得到最新的日期记录和时间最少的记录,特定日期的第一个记录,然后是下一个记录,我们希望看到您尝试过的代码。