提供源码:java获取节假日、工作日,存入数据库,查找指定日期前一天,后一天。
码云地址:
https://gitee.com/guyuanman/holiday
业务场景:
好多公司的业务在处理的时候,会面临合同规定的日期“碰上”节假日,那么工作人员就会根据当年的日历,对合同日期进行顺延或者提前到最近的工作日。
主要解决问题
- 获取指定年份的节假日和工作日信息
- 查找指定日期前一天,后一天
首先解决数据源问题:
谷咕咕这里用的是网上别人提供的接口,还是比较稳定的。而且用的人还是挺多的。
api文档,可以根据自己需要提取
http://timor.tech/api/holiday/
/**
* 添加指定年限的节假日,包括周末。
* @param year
*/
@Override
public void addHolidayAndWeekends(String year) {
try {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
headers.add("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36");
HttpEntity<String> entity = new HttpEntity<String>("parameters", headers);
Object response = restTemplate.exchange("http://timor.tech/api/holiday/year/"+year+"?type=Y&week=Y", HttpMethod.GET,entity,Object.class);
Object object= ((ResponseEntity) response).getBody();
Map<String,Object> map= (Map) object;
Map<String,Object> mapHoliday= (Map) map.get("holiday");
Holiday holidayEntry=new Holiday();
for (Map.Entry<String,Object> entry:mapHoliday.entrySet()){
Map<String,Object> mapValue=(Map<String, Object>)entry.getValue();
Boolean holiday= (Boolean) mapValue.get("holiday");
String name= (String) mapValue.get("name");
Integer wage= (Integer) mapValue.get("wage");
String date = mapValue.get("date").toString();
holidayEntry.setHoliday(holiday);
holidayEntry.setHolidayName(name);
holidayEntry.setHolidayWage(wage);
holidayEntry.setHolidayDate(date);
//这里就是存入数据库的操作了
holidayMapper.insert(holidayEntry);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
查找指定日期前的一个工作日,或者后一个工作日。
/**
* 获得参数日期的前一天
* @param dateString
* @return String
*/
String dayBefore(String dateString) throws ParseException {
Calendar calendar = Calendar.getInstance();
Date date=null;
date = new SimpleDateFormat("yyyy-MM-dd").parse(dateString);
calendar.setTime(date);
int day = calendar.get(Calendar.DATE);
calendar.set(Calendar.DATE, day - 1);
String dayBefore = new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime());
return dayBefore;
}
/**
* 获得参数日期的后面的后一天
* @param dateString
* @return String
*/
String dayAfter(String dateString) throws ParseException {
Calendar calendar = Calendar.getInstance();
Date date=null;
date = new SimpleDateFormat("yyyy-MM-dd").parse(dateString);
calendar.setTime(date);
int day = calendar.get(Calendar.DATE);
calendar.set(Calendar.DATE, day + 1);
String dayAfter = new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime());
System.out.println(dayAfter);
return dayAfter;
}
相关代码可以直接下载谷咕咕的百度云,这里我也上传了。
链接:https://pan.baidu.com/s/1p8XWwtbLeF_XCRddzMDrVg
提取码:flbh
相关接口和测试类可以自己查看。
数据库:
CREATE TABLE Holiday (
HOLIDAY_DATE DATE not null PRIMARY KEY,
IS_HOLIDAY VARCHAR(100) NULL,
HOLIDAY_NAME varchar(100) NULL,
HOLIDAY_WAGE INT(4) NULL,
HOLIDAY_REST INT(4) NULL
)