引數:字串型別的開始時間(如2020-03-05)和int型別的作業日天數
回傳值:結束日期
資料庫中存盤了節假日資訊
CREATE TABLE `tpm_holiday` (
`id` varchar(36) NOT NULL COMMENT '主鍵',
`time` datetime DEFAULT NULL COMMENT '日期',
`type` varchar(1) DEFAULT NULL COMMENT '型別'
PRIMARY KEY (`id`)
)
型別分為兩種(1代表是節假日/調休;2代表是作業日)
周六周日默認為休息日,
當周一到周五有節假榷訓調休的情況就將日期存進資料庫;當周六或周日調整為作業日的情況就將日期存進資料庫
如有哪位大佬能夠解決的話,java或js都可,非常感謝!
uj5u.com熱心網友回復:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class TestGzr {
static DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
public static String jsrq(String startDate, int days, Map<String, Integer> map) {
Date date = null;
try {
date = df.parse(startDate);
} catch (ParseException e) {
}
int i = 0;
while (i < days) {
// 獲取日期是作業榷訓是假日
int type = getDayType(date, map);
if (type == 2) {
// 如果是作業日
i++;
}
if (i == days) {
break;
}
// 將日期往后延1天
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE, 1);
date = c.getTime();
}
return df.format(date);
}
/**
* 判斷某個日期是作業榷訓是假日
*
* @param date
* @param map
* @return 假榷訓傳1,作業榷訓傳2
*/
public static int getDayType(Date date, Map<String, Integer> map) {
// 如果存在map中,則直接回傳map中的數字
if (map.containsKey(df.format(date))) {
return map.get(df.format(date));
}
// 判斷是周幾
Calendar c = Calendar.getInstance();
c.setTime(date);
int day = c.get(Calendar.DAY_OF_WEEK);
if (day == 1 || day == 7) {
return 1;
} else {
return 2;
}
}
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
// 將資料庫中的資料取出放入map中,key為日期,int為type
// 如果資料庫中資料量非常多,可以根據開始日期和后延作業日按照規則取部分資料
map.put("2021-02-07", 2);
map.put("2021-02-11", 1);
map.put("2021-02-12", 1);
map.put("2021-02-15", 1);
map.put("2021-02-16", 1);
map.put("2021-02-17", 1);
map.put("2021-02-20", 2);
System.out.println(jsrq("2021-02-01", 3, map));
System.out.println(jsrq("2021-02-01", 6, map));
System.out.println(jsrq("2021-02-01", 7, map));
System.out.println(jsrq("2021-02-01", 10, map));
System.out.println(jsrq("2021-02-01", 15, map));
}
}
結果:
2021-02-03
2021-02-07
2021-02-08
2021-02-18
2021-02-24
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/266510.html
標籤:Java SE
