String timeStart = "2016-12-11";
String timeEnd = "2016-12-20";
已知两个日期,怎么循环出 [timeStart - timeEnd] 的所有日期,包括开始和结束时间。
并存入一个List<String>的集合中
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~哈哈
伊谢尔伦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 物件