gpt4 book ai didi

java - 根据当前日期对日期数组进行排序

转载 作者:行者123 更新时间:2023-11-30 07:12:21 28 4
gpt4 key购买 nike

我有一个数组:

|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。

我在寻找逻辑,而不是要求做作业。我读了很多关于这个主题的书,但我无法设计出一条路。帮助将不胜感激。

最佳答案

I want my array to be sorted, the year is irrelevant the month and day are important. I want the closest date at index 0 and the farthest date last.

您需要首先根据月份和日期进行排序:比较任意两个日期ঃ

首先对日期列表进行排序:

  1. 比较月份,如果不相等返回差值(month1 - month2)作为比较结果
  2. 如果月份相等,则返回月日之差作为比较结果

所以 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然后 0i-1 , 在这里 n是日期列表的大小。

关于java - 根据当前日期对日期数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20465783/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com