java 已知两个日期,遍历出两个日期之间所有的日期,重点是::包括第一个日期!!

String timeStart = "2016-12-11";
String timeEnd = "2016-12-20";

已知两个日期,怎么循环出 [timeStart - timeEnd] 的所有日期,包括开始和结束时间。
并存入一个List<String>的集合中

阅读 15.4k
5 个回答

哈哈,又是日期类问题,那我肯定建议你用Java8的新时间API了,而且你时间字符串还是这种格式yyyy-MM-dd,直接LocalDate.parse方法就可以把字符串转化为LocalDate对象了

再者你这涉及到一系列有规律的时间集合,那肯定要考虑Stream啦,用Stream构造你这个集合是非常方便的快捷的,以下是示例代码:

   /**
     * 收集起始时间到结束时间之间所有的时间并以字符串集合方式返回
     * @param timeStart
     * @param timeEnd
     * @return
     */
    public static List<String> collectLocalDates(String timeStart, String timeEnd){
        return collectLocalDates(LocalDate.parse(timeStart), LocalDate.parse(timeEnd));
    }

    /**
     * 收集起始时间到结束时间之间所有的时间并以字符串集合方式返回
     * @param start
     * @param end
     * @return
     */
    public static List<String> collectLocalDates(LocalDate start, LocalDate end){
        // 用起始时间作为流的源头,按照每次加一天的方式创建一个无限流
        return Stream.iterate(start, localDate -> localDate.plusDays(1))
                     // 截断无限流,长度为起始时间和结束时间的差+1个
                     .limit(ChronoUnit.DAYS.between(start, end) + 1)
                     // 由于最后要的是字符串,所以map转换一下
                     .map(LocalDate::toString)
                     // 把流收集为List
                     .collect(Collectors.toList());
    }

然后是测试代码:

        String timeStart = "2016-12-11";
        String timeEnd = "2016-12-20";

        collectLocalDates(timeStart, timeEnd).forEach(System.out::println);

下面是打印结果:

clipboard.png

贼好用~~完美的优雅又易懂的Java8~哈哈

新手上路,请多包涵

你算出2个日期的相差天数,在循环加1,如果加的日期等于后面那个日期就行了

 思路就是这样:
 public static List<Integer> getYear(int startYear,int endYear) {
        List<Integer> years = new ArrayList<Integer>();
        while (startYear <= endYear) {
            years.add(startYear);
            startYear++;
        }
        return years;
    }
新手上路,请多包涵

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    try {
        Date begin = sdf.parse("2016-12-11");
        Date end = sdf.parse("2016-12-20");
        List<String> l = new ArrayList<String>();
        Calendar cal = Calendar.getInstance();
        while (begin.before(end)) {
            l.add(sdf.format(begin));
            cal.setTime(begin);
            cal.add(Calendar.DAY_OF_MONTH, 1);
            begin = cal.getTime();
        }
        for(String s:l){
            System.out.println(s);
        }
    } catch (ParseException e) {
        e.printStackTrace();
    }

你需要Apache的lang 包,有如下api

static Date addDays(Date date, int amount) 返回一个date 时间对象 添加 amount 天 后的新的Date 对象
static Date addHours(Date date, int amount) 返回一个date 时间对象 添加 amount h 后的新的Date 对象
static Date addMilliseconds(Date date, int amount) 返回一个date 时间对象 添加 amount 毫秒 后的新的Date 对象
static Date addMinutes(Date date, int amount) 返回一个date 时间对象 添加 amount 分钟 后的新的Date 对象
static Date addMonths(Date date, int amount) 返回一个date 时间对象 添加 amount 月 后的新的Date 对象
static Date addSeconds(Date date, int amount) 返回一个date 时间对象 添加 amount 秒 后的新的Date 对象
static Date addWeeks(Date date, int amount) 返回一个date 时间对象 添加 amount 周 后的新的Date 对象
static Date addYears(Date date, int amount) 返回一个date 时间对象 添加 amount 年 后的新的Date 对象

文章地址

推荐问题
宣传栏