java比较时间大小

时间:2025-02-21 11:50:36

我们做一些业务开发的时候,经常会遇到关于日期的条件的判断,我举个例子:在一次列表中会有一次对日期的筛选,这时如果用户选择时间2021-4-5~2021-4-4 这种格式的。这时我们就应该给他提示开始时间不能大于结束时间,这种就是逻辑错误!
我在网上找了一些资料:

英文翻译就是 在xxx之前 意思就是前面的参数小后面参数大 那就是true
格式: (xx)
可以理解为以括号里的日期为准,表示以它之前的日期来比较

表示在xxx之后,前面大后面小 那就是true
格式 : (xx)
同理:以括号为中心,以它之后的日期为true

例子:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date d1 = sdf.parse("2019-5-28");
        Date d2 = sdf.parse("2019-5-28");
        System.out.println("d1=d2时,before函数:"+d1.before(d2));
        System.out.println("d1=d2时,after函数:"+d1.after(d2));
        
        d1 = sdf.parse("2019-5-28");
        d2 = sdf.parse("2019-5-29");
        System.out.println("d1<d2时,before函数:"+d1.before(d2));
        System.out.println("d1<d2时,after函数:"+d1.after(d2));
        
        d1 = sdf.parse("2019-5-28");
        d2 = sdf.parse("2019-5-27");
        System.out.println("d1>d2时,before函数:"+d1.before(d2));
        System.out.println("d1>d2时,after函数:"+d1.after(d2));
        
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date s1 = sdf1.parse("2019-5-28 12:30:25");
        Date s2 = sdf1.parse("2019-5-28 12:31:25");
        System.out.println("(s2) = " + s1.before(s2));

答案:

d1=d2时,before函数:false
d1=d2时,after函数:false
d1<d2时,before函数:true
d1<d2时,after函数:false
d1>d2时,before函数:false
d1>d2时,after函数:true
s1.before(s2) = true

总结:

1.比较的时候,最好是年月日时分秒 ,不然年月日比较可能会存在一样的情况,那么就会一直返回false
: 可以理解为 xx1<xx2 ,前面小于后面 为true ,前小后大 true
after :可以理解为xx1>xx2 前面大后面小 为true , 前大后小 true

语法: 其中xx是Date类型
表示会把指定的日期类型转为时间戳
例子:

 SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date s1 = sdf1.parse("2019-5-28 12:30:25");
        Date s2 = sdf1.parse("2019-5-28 12:31:25");
        long time = s1.getTime();
        long d2Time = s2.getTime();
        System.out.println("time = " + time);
        System.out.println("d2Time = " + d2Time);
        System.out.println(time==d2Time);

答案:

time = 1559017825000
d2Time = 1559017885000
false

注意:我们可以将getTime转换为包装器类型 然后使用compareTo来进行比较