感觉大佬提供的免费节假日接口
http://timor.tech/api/holiday
该工具类能获取到 严格按照国家要求的双休和法定节假日并且筛掉节假日的补班。
import com.alibaba.fastjson.JSONObject;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import org.springframework.util.CollectionUtils;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
//获取周末和节假日
public static Set<String> JJR(int year,int month) {
//获取所有的周末
Set<String> monthWekDay = getMonthWekDay(year, month);
//http://timor.tech/api/holiday api文档地址
Map jjr = getJjr(year, month+1);
Integer code = (Integer) jjr.get("code");
if(code != 0){
return monthWekDay;
}
Map<String,Map<String,Object>> holiday = (Map<String, Map<String,Object>>) jjr.get("holiday");
Set<String> strings = holiday.keySet();
for (String str: strings) {
Map<String, Object> stringObjectMap = holiday.get(str);
Integer wage = (Integer) stringObjectMap.get("wage");
String date = (String) stringObjectMap.get("date");
//筛选掉补班
if(wage .equals( 1)){
monthWekDay.remove(date);
}else{
monthWekDay.add(date);
}
}
return monthWekDay;
}
//获取节假日不含周末
private static Map getJjr(int year, int month) {
String url = "http://timor.tech/api/holiday/year/"+year+"-"+month;
OkHttpClient client = new OkHttpClient();
Response response;
//解密数据
String rsa = null;
Request request = new Request.Builder()
.url(url)
.get()
.addHeader("Content-Type", "application/x-www-form-urlencoded")
.build();
try {
response = client.newCall(request).execute();
rsa = response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
return JSONObject.parseObject(rsa, Map.class);
}
//获取周末 月从0开始
public static Set<String> getMonthWekDay(int year,int mouth){
Set<String> dateList = new HashSet<>();
SimpleDateFormat simdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = new GregorianCalendar(year, mouth , 1);
Calendar endCalendar = new GregorianCalendar(year, mouth , 1);
endCalendar.add(Calendar.MONTH,1);
while (true) {
int weekday=calendar.get(Calendar.DAY_OF_WEEK);
if(weekday == 1 || weekday== 7){
dateList.add(simdf.format(calendar.getTime()));
}
calendar.add(Calendar.DATE,1);
if (calendar.getTimeInMillis() >= endCalendar.getTimeInMillis()){
break;
}
}
return dateList;
}
maven
<!-- okhttp -->
<dependency>
<groupId>com.squareup.okhttp</groupId>
<artifactId>okhttp</artifactId>
<version>2.5.0</version>
</dependency>
<!--fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>