在最近的項目中,有這麼一個需求,根據開始時間、結束時間得到兩個時間段內所有的日期,以下分享我的代碼給大家。
1、以下的這個方法適用於jdk1.5以上的版本
- /**
- * 根據開始時間和結束時間返回時間段內的時間集合
- * @param beginDate
- * @param endDate
- * @return List
- */
- @SuppressWarnings("unchecked")
- public static List getDatesBetweenTwoDate(Date beginDate, Date endDate) {
- List lDate = new ArrayList();
- lDate.add(beginDate);//把開始時間加入集合
- Calendar cal = Calendar.getInstance();
- //使用給定的 Date 設置此 Calendar 的時間
- cal.setTime(beginDate);
- boolean bContinue = true;
- while (bContinue) {
- //根據日曆的規則,爲給定的日曆字段添加或減去指定的時間量
- cal.add(Calendar.DAY_OF_MONTH, 1);
- // 測試此日期是否在指定日期之後
- if (endDate.after(cal.getTime())) {
- lDate.add(cal.getTime());
- } else {
- break;
- }
- }
- lDate.add(endDate);//把結束時間加入集合
- return lDate;
- }
2、以下的方法適用於jdk1.4以下的版本
- /**
- * 根據開始時間和結束時間返回時間段內的時間集合
- * @param beginDate
- * @param endDate
- * @return List
- */
- public static List getDatesBetweenTwoDate(Date beginDate, Date endDate) {
- List lDate = new ArrayList();
- lDate.add(beginDate);//把開始時間加入集合
- Calendar cal = Calendar.getInstance();
- //使用給定的 Date 設置此 Calendar 的時間
- cal.setTime(beginDate);
- boolean bContinue = true;
- while (bContinue) {
- //根據日曆的規則,爲給定的日曆字段添加或減去指定的時間量
- cal.add(Calendar.DAY_OF_MONTH, 1);
- // 測試此日期是否在指定日期之後
- if (endDate.after(cal.getTime())) {
- lDate.add(cal.getTime());
- } else {
- break;
- }
- }
- lDate.add(endDate);//把結束時間加入集合
- return lDate;
- }
3、調用測試
- public static void main(String[] args)throws Exception{
- System.out.println("jdk1.6測試");
- Calendar cal = Calendar.getInstance();
- String start = "2012-01-03";
- String end = "2012-03-05";
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
- Date dBegin =sdf.parse(start);
- Date dEnd = sdf.parse(end);
- List listDate = getDatesBetweenTwoDate(dBegin, dEnd);
- for(Date date:listDate){
- System.out.println(sdf.format(date));
- }
- System.out.println("jdk1.4測試");
- List lDate = getDatesBetweenTwoDate(dBegin, dEnd);
- for(int i=0;i Date date = (Date)lDate.get(i);
- System.out.println(sdf.format(date));
- }
- }