场景描述:以当前日期来判断是否节假日,如果是就把日期调整到工作日
getYearHoliday 这个方法是查询当前年度节假日有那些天(也可以查那些天串休 )
isWorkingDay 这个方法是把日期调整到工作日
/**
* @param currentYear 当前年度
* @return 是否成功
*/
public static Result<List<String>> getYearHoliday(Integer currentYear) {
//节假日
List<String> hoList = new ArrayList<>();
//调休
List<String> extraList = new ArrayList<>();
//获取免费api地址
String httpUrl = "https://timor.tech/api/holiday/year/" + currentYear;
BufferedReader reader = null;
// 用于存储返回的年份节假日数据
StringBuffer sbf = new StringBuffer();
try {
// 创建url对象
URL url = new URL(httpUrl);
// 使用openConnection方法创建了一个URLConnection对象
URLConnection connection = url.openConnection();
// 设置请求头
connection.setRequestProperty("User-Agent", "Mozilla/4.76");
connection.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
/**
* 使用getInputStream方法获取输入流,这个输入流可以用来读取从URL地址返回的数据,
* 可能是HTML内容、JSON数据或其他类型的信息。
* 具体取决于URL地址所指向的资源类型。
*/
InputStream is = connection.getInputStream();
// BufferedReader创建字节流对象,InputStreamReader将字节流转换为字符流,编码为utf8
reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));
String strRead = null;
while ((strRead = reader.readLine()) != null) {
// 将每行内容追加到sbf字符串变量中
sbf.append(strRead);
// 手动添加换行符
sbf.append("\r\n");
}
reader.close(); // 关闭流
//字符串转json
JSONObject json = JSON.parseObject(sbf.toString());
//根据holiday字段获取jsonObject内容
JSONObject holiday = json.getJSONObject("holiday");
if (holiday.size() == 0) {
return Result.error(ResultCode.ERROR.getCode(), "该年份未分配日期安排!----->>holiday为空", null);
}
for (Map.Entry<String, Object> entry : holiday.entrySet()) {
// 读取字符的值,并转换成字符串
String value = entry.getValue().toString();
// 将字符串改为json格式
JSONObject jsonObject = JSONObject.parseObject(value);
// 获取是否为假日(是为true,不是为false)
String hoBool = jsonObject.getString("holiday");
// 获取时间
String extra = jsonObject.getString("date");
//判断不是假期后调休的班
if ("true".equals(hoBool)) {
hoList.add(extra);
} else {
extraList.add(extra);
}
}
} catch (Exception e) {
return Result.error(ResultCode.ERROR.getCode(), "getYearHoliday方法错误----->>getYearHoliday", null);
}
return Result.success(hoList);
}
/**
* 判断是否为节假日
*
* @param date 日期时间
* @return
*/
public static LocalDate isWorkingDay(LocalDate date) {
Integer currentYear = date.getYear();
Result<List<String>> result = getYearHoliday(currentYear);
if (result.getCode()==SUCCESS){
List<String> yearHoliday = result.getData();
Collections.sort(yearHoliday);
for (String holiday : yearHoliday) {
if(holiday.equals(date.toString())){
// 当前日期加一天
date = date.plusDays(1);
}
}
}else {
return null;
}
return date;
}