我们做一些业务开发的时候,经常会遇到关于日期的条件的判断,我举个例子:在一次列表中会有一次对日期的筛选,这时如果用户选择时间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来进行比较