【发布时间】:2014-12-17 21:34:04
【问题描述】:
注意,这个比较器有效。我只是想知道是否有更优雅的方式来做到这一点? 基本上,我有一个 mm/dd/yyyy(或 MM/dd/yyyy)形式的日期 LinkeList。由于显而易见的原因,进行常规字符串排序将无法正常工作,因为 2015 年 1 月 1 日将在 1997 年 12 月 12 日之前出现。所以我写了这个比较器。
不过,有一个问题。有时日期可能为空(或空白),因此它应该先升序,或最后降序。
我编写了这个比较器,并将其发送到 Collections.sort()。请记住,它确实有效,但必须有更简单的方法?
哦,我忘记提的一件事是这个声明:
public class DateFormats {
...
public static final SimpleDateFormat PTL_MMddyyyy = new SimpleDateFormat("MM/dd/yyyy");
...
}
比较器如下:
public static class dateSort implements Comparator<String> {
@Override
public int compare(String cur, String nxt) {
String veryEarlyDate = "01/01/0001";
Date curdate = null;
Date nxtdate = null;
cur = ((cur != null && !cur.trim().isEmpty()) ? cur : veryEarlyDate);
nxt = ((nxt != null && !nxt.trim().isEmpty()) ? nxt : veryEarlyDate);
try {
curdate = DateFormats.PTL_MMddyy.parse(cur);
nxtdate = DateFormats.PTL_MMddyy.parse(nxt);
} catch (Exception e) {
System.out.println("Bad date " + cur + " or " + nxt);
assert (false) : e.getMessage();
}
return curdate.compareTo(nxtdate);
}
}
【问题讨论】:
-
为什么不对
Date对象列表进行排序,而不是尝试操作字符串列表? -
您是否必须拥有一组字符串而不是一组基于日期的对象(例如
LocalDate)?一般来说,最好尽可能多地保持数据的“自然”形式。 -
html页面上是这样的,MM/dd/yyyy
-
HTML 页面中有很多整数、长整数和其他数字元素,它们首先被读取为
Strings,这并不意味着我不能将它们存储为它们的真实类型。
标签: java sorting date comparator