我需要对日期为字符串的开始日期的课程列表进行排序。

排序应基于开始日期,列表中的日期如下所示:


03:20
04:10
09:40
08:00
08:50
01:50
02:30


请注意,此处的排序是自定义的,开始日期从01到07的每个项目都应低于08到12的日期

例如,上面的列表将是:


08:00
08:50
09:40
01:50
02:30
03:20
04:10


我如何做到这一点,我尝试了:

int compare = this.getStartDate().compareTo(o.getStartDate());
if (compare > 0 && this.getStartDate().charAt(1) >= '1' && this.getStartDate().charAt(1) <= '7')
        return -1;
if (compare < 0 && o.getStartDate().charAt(1) < '1' && o.getStartDate().charAt(1) > '7')
        return 1;
return compare;

最佳答案

使用以下方法,将小时部分加12,将低于“ 08:00”的时间转换为大于“ 12:00”的时间:

public static String getValue(String s) {
    String[] splitted = s.split(":");
    int hour = Integer.parseInt(splitted[0]);
    if (hour < 8) {
        hour += 12;
        splitted[0] = String.valueOf(hour);
    }
    return splitted[0] + ":" + splitted[1];
}


现在比较如下:

return getValue(this.getStartDate()).compareTo(getValue(o.getStartDate()));

09-25 22:05