我怎样才能在java中按升序排列当前最后7天?

sur*_*aha 9 java date

我使用以下代码来获取最近7天:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd ");
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
String[] days = new String[6];
days[0] = sdf.format(date);

for(int i = 1; i < 6; i++){
    cal.add(Calendar.DAY_OF_MONTH, -1);
    date = cal.getTime();
    days[i] = sdf.format(date);
}

for(String x: days){
    System.out.println(x);
}
Run Code Online (Sandbox Code Playgroud)

这是给出以下输出:

2016-04-14
2016-04-13
2016-04-12
2016-04-11
2016-04-10
2016-04-09
Run Code Online (Sandbox Code Playgroud)

但我想要这个:

2016-04-09
2016-04-10
2016-04-11
2016-04-12
2016-04-13
2016-04-14
Run Code Online (Sandbox Code Playgroud)

如果我在代码下面使用以下行,它将给我正确的顺序:

List<String> list = Arrays.asList(days);
Collections.reverse(list);
days = (String[]) list.toArray();

for(String x: days){
    System.out.println(x);
}
Run Code Online (Sandbox Code Playgroud)

但有没有其他方法可以一次性按升序排列过去7天?

Jor*_*lla 10

我会简化你的方法,如果你想要这个输出你不需要创建一个String[]数组,要么循环两次,你可以用一个for-loop,一个CalendarSimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd ");
Calendar cal = Calendar.getInstance();
// get starting date
cal.add(Calendar.DAY_OF_YEAR, -6);

// loop adding one day in each iteration
for(int i = 0; i< 6; i++){
    cal.add(Calendar.DAY_OF_YEAR, 1);
    System.out.println(sdf.format(cal.getTime()));
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

2016-04-09 
2016-04-10 
2016-04-11 
2016-04-12 
2016-04-13 
2016-04-14 
Run Code Online (Sandbox Code Playgroud)

使用IDEONE演示


g-t*_*g-t 5

使用 java8 和 joda,您可以编写如下内容:

LocalDate weekBeforeToday = LocalDate.now().minusDays(7);
IntStream.rangeClosed(1, 7)
    .mapToObj(weekBeforeToday::plusDays)
    .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

它打印:

2016-04-08
2016-04-09
2016-04-10
2016-04-11
2016-04-12
2016-04-13
2016-04-14
Run Code Online (Sandbox Code Playgroud)

如果您需要收集,则必须使用收集器。

在您的示例中,您要打印 6 天,所以如果是您的错误或者您需要 6 天而不是 7 天,我现在不会打印。


Lea*_*ase 1

Collections.sort

可以用Collections.sort方法。这是一个静态方法。您将列表和比较器传递给它。它对列表使用修改后的合并排序算法。这就是为什么您必须向其传递一个比较器来进行成对比较。这个问题之前也已经回答过。

按日期对 ArrayList 中的对象进行排序?