如何使用Java动态填充最近7个日期的集合列表

时间:2014-05-30 18:31:38

标签: java mongodb date

我有一个存储在字符串中的当前日期,我需要使用Java中的mongoDB对象动态地从列表中选择当前日期到过去7天的日期

所以我把它保存在一个字符串

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.add(Calendar.DATE, -7);
Date s1 = cal1.getTime();

cal2.set(Calendar.HOUR_OF_DAY, 0);
cal2.set(Calendar.MINUTE, 0);
cal2.set(Calendar.SECOND, 0);
cal2.set(Calendar.MILLISECOND, 0);
String s2 = sdf.format(cal2.getTime());

以上,s2是当前日期2014-05-12,所以在列表中我需要有如下数据 -

List<String> dates = {'2014-05-12', '2014-05-11','2014-05-10', '2014-05-9','2014-05-8', '2014-05-7','2014-05-6'};

列表日期具有5月6日至5月12日的最后7天的所有值。 (截至5月12日是当前时间戳)

我想使用当前日期动态填充最近7天的列表。

2 个答案:

答案 0 :(得分:0)

    String date = "2014-05-03";
    List<String> dateList = new ArrayList<>();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    for (int i = 0; i < 6; i++) {

        Date dateParsed = sdf.parse(date);
        dateParsed.setDate(dateParsed.getDate() - i);
        dateList.add(sdf.format(dateParsed));
    }

这样你既不关心月份也不关心年份。在我的例子当天&lt; 0会自动转换为过去一个月。

答案 1 :(得分:0)

虽然您的问题令人困惑,但answer by Bevilaqua似乎是正确的。

约达时间

仅供参考,这里的代码与Bevilaqua编写的代码相同,但使用的是Joda-Time库。 Joda-Time提供LocalDate课程,以确定您何时只想要一个没有时间的日期。

ISO 8601

由于您的日期字符串是ISO 8601格式,并且Joda-Time默认处理ISO 8601格式,因此无需解析。 Joda-Time可以使用其内置的默认解析器。

String date = "2014-05-03";
LocalDate dateParsed = new LocalDate(date); // Automatically parses ISO 8601 format string.
List<String> dateList = new ArrayList<>();
for (int i = 0; i < 6; i++) {
    LocalDate localDate = dateParsed.minusDays( i );
    dateList.add( localDate.toString() ); // By default, "toString" generates ISO 8601 format string.
}