獲取某一時間段特定星期幾的所有日期(Java實現)
阿新 • • 發佈:2019-01-30
廢話不多說,還是直接上程式碼,有需要的童孩可以自行研究:
/** * 獲取某一時間段特定星期幾的日期 * @author finder.zhou */ public class WeekDayUtil { public static void main(String[] args) { getDates("2013-04-01", "2014-04-14","星期一|星期二|星期日"); } /** * 獲取某一時間段特定星期幾的日期 * @param dateFrom 開始時間 * @param dateEnd 結束時間 * @param weekDays 星期 * @return 返回時間陣列 */ public static String[] getDates(String dateFrom, String dateEnd, String weekDays) { long time = 1l; long perDayMilSec = 24 * 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.indexOf(weekDay.toString())!=-1) { System.out.println(dateFrom); dateList.add(dateFrom); } } else { break; } } } catch (ParseException e1) { e1.printStackTrace(); } String[] dateArray = new String[dateList.size()]; dateList.toArray(dateArray); return dateArray; } //等到當期時間的周係數。星期日: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); } /** * 得到對應星期的係數 星期日:1,星期一:2,星期二:3,星期三:4,星期四:5,星期五:6,星期六:7 * @param weekDays 星期格式 星期一|星期二 */ public static String weekForNum(String weekDays){ //返回結果為組合的星期係數 String weekNumber = ""; //解析傳入的星期 if(weekDays.indexOf("|")!=-1){//多個星期數 String []strWeeks = weekDays.split("\\|"); for(int i=0;i<strWeeks.length;i++){ weekNumber = weekNumber + "" + getWeekNum(strWeeks[i]).toString(); } }else{//一個星期數 weekNumber = getWeekNum(weekDays).toString(); } return weekNumber; } //將星期轉換為對應的係數 星期日:1,星期一:2,星期二:3,星期三:4,星期四:5,星期五:6,星期六:7 public static Integer getWeekNum(String strWeek){ Integer number = 1;//預設為星期日 if("星期日".equals(strWeek)){ number = 1; }else if("星期一".equals(strWeek)){ number = 2; }else if("星期二".equals(strWeek)){ number = 3; }else if("星期三".equals(strWeek)){ number = 4; }else if("星期四".equals(strWeek)){ number = 5; }else if("星期五".equals(strWeek)){ number = 6; }else if("星期六".equals(strWeek)){ number = 7; } return number; } }