我使用以下代码来获取最近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,一个Calendar和SimpleDateFormat
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)
使用 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 天,我现在不会打印。
Collections.sort可以用Collections.sort方法。这是一个静态方法。您将列表和比较器传递给它。它对列表使用修改后的合并排序算法。这就是为什么您必须向其传递一个比较器来进行成对比较。这个问题之前也已经回答过。
| 归档时间: |
|
| 查看次数: |
6575 次 |
| 最近记录: |