標籤:
最近在做畢設,遇到一個問題。對於給定的一個時間段和特定的星期,我需要獲得這個時間段中所有的給定星期的日期。
比如,獲得從2015-01-01到2015-01-21所有的星期一和星期二的日期。
package com.cc.common;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
public class WeekDayUtil {
/**
* 輸入一個日期的時間段,以及相應的星期數,獲得這些星期的日期
*/
private static Map<Integer, Integer> weekNumberMap = new HashMap<Integer, Integer>();
static {
weekNumberMap.put(0,1);
weekNumberMap.put(1,2);
weekNumberMap.put(2,3);
weekNumberMap.put(3,4);
weekNumberMap.put(4,5);
weekNumberMap.put(5,6);
weekNumberMap.put(6,7);
}
public static List<String> getDates(String dateFrom, String dateEnd, List<Integer> weekDays) {
long time;
long perDayMilSec = 24L * 60 * 60 * 1000;
List<String> dateList = new ArrayList<String>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 需要查詢的星期係數
String strWeekNumber = weekForNum(weekDays);
try {
dateFrom = sdf.format(sdf.parse(dateFrom).getTime() - perDayMilSec);
while (true) {
time = sdf.parse(dateFrom).getTime();
time = time + perDayMilSec;
Date date = new Date(time);
dateFrom = sdf.format(date);
if (dateFrom.compareTo(dateEnd) <= 0) {
// 查詢的某一時間的星期係數
Integer weekDay = dayForWeek(date);
// 判斷當期日期的星期係數是否是需要查詢的
if (strWeekNumber.contains(weekDay.toString())) {
dateList.add(dateFrom);
}
} else {
break;
}
}
} catch (ParseException e) {
e.printStackTrace();
}
return dateList;
}
// 等到當期時間的周係數。星期日:1,星期一:2,星期二:3,星期三:4,星期四:5,星期五:6,星期六:7
public static Integer dayForWeek(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
return calendar.get(Calendar.DAY_OF_WEEK);
}
/**
* 得到對應星期的係數 0:1,星期
*/
public static String weekForNum(List<Integer> weekDays) {
// 返回結果為組合的星期係數
String weekNumber = "";
for (Integer weekDay : weekDays) {
weekNumber = weekNumber + "" + getWeekNum(weekDay).toString();
}
return weekNumber;
}
// 將星期轉換為對應的係數 0,星期日; 1,星期一; 2....
public static Integer getWeekNum(int strWeek) {
return weekNumberMap.get(strWeek);
}
public static void main(String[] args) {
//輸出從2015-01-01到2015-01-21之間的所有星期一和星期二的日期。
List<Integer> daysOfOneWeek = new ArrayList<Integer>();
daysOfOneWeek.add(1);
daysOfOneWeek.add(2);
List<String> daysNeedBookList = getDates("2015-01-01", "2015-01-21", daysOfOneWeek);
for (String s : daysNeedBookList) {
System.out.println(s);
}
}
}
main方法測試後,輸出:
2015-01-05
2015-01-06
2015-01-12
2015-01-13
2015-01-19
2015-01-20
java實現輸入一個時間段,以及相應的星期數,獲得這個時間段中這些星期的日期