本文章适用于时间格式不正常的情况,如时间为2018-9-30而不是2018-09-30
至于为什么我们就要来看看compareTo方法
compareTo的源码很简单:
是将那两个比较的值先记录他们的长度,取他们长度的最小值,然后比较他们这个最小值长度里的大小,将他们转化成char数组,一个字符的比较,一旦出现不一样的就返回c1 - c2,如果都一样,那么才返回len1-len2;
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) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}
一般情况这样也可以处理,但是对于时间如2018-9-30和2018-10-30,当比较到9和1的时间,那么就会将2018-9-30当成更大的值.
所以我的做法是将String类型的时间转换成Long类型的毫秒值,通过毫秒值然后冒泡排序他们就可以了.
private Long StringToLong(String str) throws ParseException {
String a= str.replaceAll("/", "-");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = df.parse(a);
Long time = date.getTime();
return time;
}
```将String类型的时间转换为Long类型的毫秒值
```java
for(int i = 0 ; i < tFReport.size() ; i++) {
for(int j = tFReport.size()-1 ; j > i ; j--) {
try {
Long a = StringToLong((tFReport.get(j).getAssayDate()));
Long b = StringToLong((tFReport.get(j-1).getAssayDate()));
if(a>b) {
TFReport stu = tFReport.get(j);
tFReport.set(j, tFReport.get(j-1));
tFReport.set(j-1, stu );
}
} catch (ParseException e) {
e.printStackTrace();
}
}
}
```排序方法