[週期]根據當前時間計算每週星期幾、每月幾號、每年幾月幾日的執行時間

1、每週。例如計算每週一的時間。

2、每月。例如計算每月15號的時間。

3、每年。例如計算每年5月20號的時間。

<span style="white-space:pre">			</span>String RWFKSJ = "";    //任務反饋時間
			String RWKSSJ = "";    //任務開始時間
			String SJTZ = "";
			SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//設置日期格式
			Calendar cal = Calendar.getInstance(); // java.util包
			Date nowdate = null;  
			if(!"".equals(ZQ)){
				//獲取當前日期
				String StrnowDate = df.format(new Date());
				if("每週".equals(ZQ)){
					SJTZ = request.getParameter("SJTZWEEK")==null ?"": request.getParameter("SJTZWEEK");
					//獲取當前 日期所對應的周X。獲取星期Y。
					int nowday = getWeekday(userName,StrnowDate);
					int zqday = getNum(SJTZ);
					String Strzqdate = "";
					if(zqday>=nowday){ //若x《y。則計算周y的時間M
						cal.add(Calendar.DATE, zqday-nowday); // 日期減 如果不夠減會將月變動
						Strzqdate = df.format(cal.getTime());
					}else { //若x》= y。則計算周y+7天的時間M yyyy年-mm月-dd日
						cal.add(Calendar.DATE, zqday+7-nowday); // 日期減 如果不夠減會將月變動
						Strzqdate = df.format(cal.getTime());
					}
					nowdate = df.parse(StrnowDate); 
					cal.setTime(nowdate); 
					//cal.add(Calendar.DATE , FKSJD); // 日期減 如果不夠減會將月變動
					Date jsDate = df.parse(df.format(cal.getTime()));
					Date zqDate = df.parse(Strzqdate);
					if(zqDate.after(jsDate)||zqDate.equals(jsDate)){
						RWKSSJ = df.format(zqDate);
					}else{
						RWKSSJ = getDayDate(zqDate, jsDate);
					}
					
					Date rwkssjdate = df.parse(RWKSSJ);
//					cal.setTime(rwkssjdate);
//					cal.add(Calendar.DATE, -XFSJD);
//					RWXFSJ = df.format(cal.getTime());
					cal.setTime(rwkssjdate);
					cal.add(Calendar.DATE, FKSJD);
					RWFKSJ = df.format(cal.getTime());
				}else if("每月".equals(ZQ)){
					SJTZ = request.getParameter("SJTZMONTH")==null ?"": request.getParameter("SJTZMONTH");
					//獲取到週期 每月 幾號 幾天後    8號  10天后
					//獲取當前月份
					//則當月的週期時間爲當月+幾號
					//獲取當前日期+10天后的時間
//					Date jsDate = cal.getTime();
					String month = "";
					if(cal.get(Calendar.MONTH)+1<10){
						month = "0"+(cal.get(Calendar.MONTH)+1);
					}else{
						month = ""+(cal.get(Calendar.MONTH)+1);
					}
					String StrDate = cal.get(Calendar.YEAR) +"-" + month +"-" + SJTZ.replaceAll("[^0-9]","") ;
					
					Date zqDate = df.parse(StrDate);
					Date jsDate = df.parse(df.format(cal.getTime()));
					if(zqDate.after(jsDate)||zqDate.equals(jsDate)){
						RWKSSJ = df.format(zqDate);
					}else{
						RWKSSJ = getMonthDate(zqDate, jsDate);
					}
					
					Date rwkssjdate = df.parse(RWKSSJ);
					cal.setTime(rwkssjdate);
					cal.add(Calendar.DATE, FKSJD); // 日期加 如果不夠加會將月變動
					RWFKSJ = df.format(cal.getTime());
				}else if("每年".equals(ZQ)){
					String SJTZ1 = request.getParameter("SJTZYEAR1")==null ?"": request.getParameter("SJTZYEAR1");
					String SJTZ2 = request.getParameter("SJTZYEAR2")==null ?"": request.getParameter("SJTZYEAR2");
					SJTZ = SJTZ1 +"-"+ SJTZ2;
					//將日期拼接成 yyyy年mm月dd日
					String hqrqStr = cal.get(Calendar.YEAR) +"-"+ SJTZ1.replaceAll("[^0-9]","") +"-"+ SJTZ2.replaceAll("[^0-9]","") ;
					Date zqDate = df.parse(hqrqStr);
					Date jsDate = df.parse(df.format(cal.getTime()));
					if(zqDate.after(jsDate)||zqDate.equals(jsDate)){
						RWKSSJ = df.format(zqDate);
					}else{
						RWKSSJ = getYearDate(zqDate, jsDate);
					}
					Date rwkssjdate = df.parse(RWKSSJ);
					cal.setTime(rwkssjdate);
					cal.add(Calendar.DATE, FKSJD); // 日期加 如果不夠加會將月變動
					RWFKSJ = df.format(cal.getTime());
				} else {
					obj.put("success", false);
					obj.put("msg", "操作失敗!週期類型["+ZQ+"]不存在!");
				}
			}else{
				obj.put("success", false);
				obj.put("msg", "操作失敗!週期爲空!");
			}
<pre name="code" class="java">//實現給定某日期,判斷是星期幾
    public static int getWeekday(String userName,String date){//必須yyyy-MM-dd
	    SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
	    SimpleDateFormat sdw = new SimpleDateFormat("E");
	    Date d = null;
	    int num = 0;
	    try {
	    	d = sd.parse(date);
	    	String day = sdw.format(d);
	    	num = getNum(day);
	    } catch (ParseException e) {
	    	Tools.errorList(e, userName);
	    }
		return num;
    }
<pre name="code" class="java"><span style="white-space:pre">	</span>/**
	 * 根據周幾得出數字
	 * @param day
	 * @return
	 */
	public static int getNum(String day){
		if ("星期一".equalsIgnoreCase(day))
            return 1;
        else if ("星期二".equalsIgnoreCase(day))
            return 2;
        else if ("星期三".equalsIgnoreCase(day))
            return 3;
        else if ("星期四".equalsIgnoreCase(day))
            return 4;
        else if ("星期五".equalsIgnoreCase(day))
            return 5;
        else if ("星期六".equalsIgnoreCase(day))
            return 6;
        else if ("星期日".equalsIgnoreCase(day))
            return 7;
        return 0;
	}
<pre name="code" class="java"><span style="white-space:pre">	</span>/**
	 * 獲取下次執行時間
	 * @param zqDate
	 * @param jsDate
	 * @return
	 */
	@SuppressWarnings("static-access")
	public String getDayDate(Date zqDate,Date jsDate){
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//設置日期格式
		if(zqDate.after(jsDate)){
			return df.format(zqDate);
		}else{
			Calendar cal = Calendar.getInstance(); // java.util包
			cal.setTime(zqDate);
			cal.add(cal.DATE, 7);
			zqDate = cal.getTime();
			return getDayDate(zqDate, jsDate);
		}
	}
<pre name="code" class="java"><span style="white-space:pre">	</span>@SuppressWarnings("static-access")
	public String getMonthDate(Date zqDate,Date jsDate){
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//設置日期格式
		if(zqDate.after(jsDate)){
			return df.format(zqDate);
		}else{
			Calendar cal = Calendar.getInstance(); // java.util包
			cal.setTime(zqDate);
			cal.add(cal.MONTH, 1);
			zqDate = cal.getTime();
			return getMonthDate(zqDate, jsDate);
		}
	}
<pre name="code" class="java"><span style="white-space:pre">	</span>private String getYearDate(Date zqDate, Date jsDate) {
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//設置日期格式
		if(zqDate.after(jsDate)){
			return df.format(zqDate);
		}else{
			Calendar cal = Calendar.getInstance(); // java.util包
			cal.setTime(zqDate);
			cal.add(cal.YEAR, 1);
			zqDate = cal.getTime();
			return getYearDate(zqDate, jsDate);
		}
	}











發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章