搜尋

首頁  >  問答  >  主體

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

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

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

迷茫迷茫2888 天前714

全部回覆(5)我來回復

  • PHPz

    PHPz2017-04-18 10:32:22

    哈哈,又是日期類問題,那我肯定建議你用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);

    下面是列印結果:

    賊好用~~完美的優雅又易懂的Java8~哈哈

    回覆
    0
  • 阿神

    阿神2017-04-18 10:32:22

    你算出2個日期的相差天數,在循環加1,如果加的日期等於後面那個日期就行了

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-18 10:32:22

    雷雷

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-18 10:32:22

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

    雷雷

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:32:22

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

    static Date addDays(Date date, int amount) 回傳一個date 時間物件新增amount 天後的新的Date 物件
    static Date addHours(Date date, int amount) 傳回一個date 時間物件新增至 h hate 後的新的Date 後的新的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 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 物件

    文章地址

    回覆
    0
  • 取消回覆