我有一个数组:
| YYYY-MM-DD || YYYY-MM-DD || YYYY-MM-DD || ... || .... ||...。
现在,我查询系统的当前日期,并基于该日期,我希望对数组进行排序,年份无关紧要,月份和日期很重要。我想要最近的日期在索引0和最远的日期在最后。
假设有三个日期1999-04-04、1789-03-01、2012-05-04
如果是四月:排序后的数组应类似于
1999-04-04、2012-05-04、1789-03-01。
我在寻找逻辑,而不是在做功课。我读了很多关于这个主题的书,但是我无法设计出一条路。帮助将不胜感激。
我希望对数组进行排序,年份无关紧要,月份和日期很重要。我想要最近的日期在索引0和最远的日期在最后。
您将需要首先基于月和日进行排序:在比较任意两个Dateঃ时
首先对日期列表进行排序:
因此compareTo(Date o)
,实现的功能Comparable<Date>
将如下所示:
@Override
public int compareTo(Date o) {
Calendar cal1 = Calendar.getInstance();
cal1.setTime(this.date);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(o);
int month1 = cal1.get(Calendar.MONTH);
int month2 = cal2.get(Calendar.MONTH);
if(month1 < month2)
return -1;
else if(month1 == month2)
return cal1.get(Calendar.DAY_OF_MONTH) - cal2.get(Calendar.DAY_OF_MONTH);
else return 1;
}
排序后,您可以将列表四舍五入,认为它是循环的。例如,假设排序列表(不相关的年份不包括在内):
JAN 20, FEB 5, SEP 18, OCT 9, OCT 20, NOV 23
如果我们的数据透视表(关闭日期与日期比较)OCT 11
选择的是即时的较大(最小日期大于数据透视表)日期,则为OCT 20
。您可以使用for循环找到它。现在,我们只需要四舍五入就认为它是循环的:
OCT 20, NOV 23 --> JAN 20, FEB 5, SEP 18, OCT 9
形式上,发现该指数i
即时较大日期根据月和日(尝试使用的compareTo例子),然后创建一个新的列表,插入从索引开始元素在比较我们的支点i
来n-1
,然后0
到i-1
,这里n
是的大小日期列表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句