最近遇到一个问题,在日期比较的时候,很麻烦,因为日期比较没有大于等于,只有大于或者小于,这就导致在比较时间的时候特别麻烦,而且还要由string转成date格式才能比较,下面是我使用compareTo比较时间字符串的代码:
String putStartTime = DateUtil.formatDate(adverInformation.getPutStartTime());
String putEndTime = DateUtil.formatDate(adverInformation.getPutEndTime());
String currentTime = DateUtil.getCurrentTime("yyyy-MM-dd");
int compareTo = putStartTime.compareTo(currentTime);
int compareTo2 = currentTime.compareTo(putEndTime);
if(compareTo>0 || compareTo2>0) {
adverInformation.setAdverStatus(AdverConst.ADVER_STATUS_OUTLAUNCH);
}else {
adverInformation.setAdverStatus(AdverConst.ADVER_STATUS_INLAUNCH);
}
下面来看一下源码:
public int compareTo(String anotherString) {
int len1 = value.length;//获取第一个参数的字符串长度
int len2 = anotherString.value.length;//获取第二份字符串长度
int lim = Math.min(len1, len2);//获取两者字符串长度最短的
char v1[] = value;//第一个参数的值
char v2[] = anotherString.value;//第二个参数的值
int k = 0;
while (k < lim) {//获取长度最短的,然后和0、1、2、3..比较
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;//比较当前参数的第K位知否相等,如果相等,则继续++,如果不想等,则直接返回差值
}
k++;
}
return len1 - len2;//如果参数前面的几位字符都是一样的话,那就直接用两个参数的长度相减
}
以下是几个典型的例子仅供参考:
java中的compareto方法,返回参与比较的前后两个字符串的asc码的差值
String a = "a";
String b = "b";
System.out.println(a.compareTo(b));
输出值-1
String a = "b";
String b = "a";
System.out.println(a.compareTo(b));
输出值1
String a = "a";
String b = "a";
System.out.println(a.compareTo(b));
输出0
两个字符串首字母不同,则该方法返回首字母的asc码的差值
String a = "abc";
String b = "bcdfg";
System.out.println(a.compareTo(b));
输出-1
参与比较的两个字符串如果首字符相同,则比较下一个字符,直到有不同的为止,返回该不同的字符的asc码差值
String a = "abcdef";
String b = "abe";
System.out.println(a.compareTo(b));
输出-2
两个字符串不一样长,可以参与比较的字符又完全一样,则返回两个字符串的长度差值
String a = "abc";
String b = "abcdefg";
System.out.println(a.compareTo(b));
输出-4
String a = "abcde";
String b = "abcd";
System.out.println(a.compareTo(b));
输出1
目前compareTo项目中的用途是比较版本号的高低
String a = "1.0.0";
String b = "1.0.1";
System.out.println(a.compareTo(b));
输出-1
日期比较,跟字符串比较基本类似,a日期在b后面,所以返回1
String a = "2018-08-23";
String b = "2018-08-15";
System.out.println(a.compareTo(b));
输出1
总结:返回整数则说明a大于b,返回0则表示a等于b,返回负数则表示a小于b。
坑位:compareTo比较返回的值不仅仅只有1、0、-1,最好判断是大于0还是小于0