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);
}
}