如何在后台判断两个字符串类型日期的大小
前段时间本人遇到了一个和活动时间有关的需求,需要判断该时间处于哪个时间段内。因为平时判断时间都是在数据库里进行的,对于代码判断日期不太熟悉,所以查看了一些资料,将收集到的方法整理在这里。
compareTo方法
String类中提供了compareTo方法,原理是将字符串转成char[],从char[0]开始进行比较,如果两值不相等,则返回相减的结果。一般将结果与0相比,进行判断,并不关心返回的具体值:
String s1="2020-07-22";
String s2="2020-06-22";
System.out.println(s1.compareTo(s2));//结果:1
System.out.println(s2.compareTo(s1));//结果:-1
这里有几个点需要注意:
- 两个日期格式必须相同,如 :2020-01-01与2020-05-05。如果格式不同,比如2020/01/01,则可能会影响最终结果。
- 在保证日期格式相同的基础上,有没有时分秒只会影响当年月日相同时的结果:
String s1="2020/06/22";
String s2="2020/05/22 13:01:15";
System.out.println(s1.compareTo(s2));//结果:1
String s3="2020/06/22";
String s4="2020/06/22 13:01:15";
System.out.println(s3.compareTo(s4));//结果:-9
SimpleDateFormat类
SimpleDateFormat类想必大家都不陌生,SimpleDateFormat可以通过parse方法,将一个日期类型的字符串,转化成对应的Date型日期。我们就可以对Date进行操作。
- compaTo方法
Date同样有compareTo的方法,可以将String通过SimpleDateFormat转化成Date类型,再进行compareTo的判断。当然,这样会比较麻烦,适合一些特点需求。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String now = "2020-01-01";
String end = "2019-01-01";
Date nowDate = sdf.parse(now);
Date endDate = sdf.parse(end);
System.out.println(nowDate.compareTo(endDate));//结果:1
- getTime方法
Date中提供了getTime方法,该方法的返回值是自1970-01-01 00:00:00到指定日期间的毫秒数,返回值类型为long。通过比较毫秒数大小,同样可以比较时间的大小。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
long time1 = sdf.parse("2019-1-1").getTime();
long time2 = sdf.parse("2020-1-1").getTime();
System.out.println(time1>time2);//false
相比之下,String的compareTo方法使用起来则更加的方便。