JAVA判断当前时间是否为节假日、周末、工作日
需求
有这么个需求,需要判断拿到的这个日期是否为节假日,周末,工作日,然后做剩下的操作。
话不多说,上代码
1.首先需要拿到节假日api
节假日API地址
2.拿到接口,如下:
参数:
1》d: 指定日期的字符串,格式 ‘2018-02-23’。可以省略,则默认服务器的当前时间
2》type:是否返回日期类型,默认不返回。可选值:’Y’ 返回,’N’ 不返回
https://timor.tech/api/holiday/batch?d=2023-09-29&type=Y
返回数据:
{
"code": 0,
"holiday": {
"2023-09-29": {
"holiday": true,
"name": "中秋节",
"wage": 3,
"date": "2023-09-29",
"rest": 81
}
},
"type": {
"2023-09-29": {
"type": 2,
"name": "中秋节",
"week": 5
}
}
}
截图如下
3.拿到项目中,编写成一个HolidayUtil 工具类,代码如下:
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Author zhangsan
* @Date 2023/7/6 14:44
* @Version 1.0
* 判断今天是工作日/周末/节假日 工具类
* //0 上班 1周末 2节假日
*/
public class HolidayUtil {
/**
*
* @param httpArg 日期参数 格式‘yyyy-mm-dd’
* @param type 是否返回日期类型,默认不返回。可选值:’Y’ 返回,’N’ 不返回
* @return
*/
public static String request(String httpArg,String type) {
//获取免费api地址
String httpUrl="http://timor.tech/api/holiday/batch";
BufferedReader reader = null;
String result = null;
StringBuffer sbf = new StringBuffer();
httpUrl = httpUrl + "?d=" + httpArg + "&type="+type;
try {
URL url = new URL(httpUrl);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
//使用Get方式请求数据
connection.setRequestMethod("GET");
connection.connect();
InputStream is = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String strRead = null;
while ((strRead = reader.readLine()) != null) {
sbf.append(strRead);
sbf.append("\r\n");
}
//字符串转json
JSONObject json = JSON.parseObject(sbf.toString());
//根据type字段获取jsonObject内容
JSONObject jsonObject = (JSONObject)json.get("type");
//根据日期字段获取嵌套的日期内容
JSONObject object = jsonObject.getJSONObject(httpArg);
//再根据嵌套中的type字段获取type的数据
//result就是拿到的最终type的数据,0代表工作日,1代表周末,2代表节假日
result = object.getString("type");
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* json数组转集合类型
* @param jsonArray
* @return
*/
public static List<Map<String, Object>> jsonArrayToList(JSONArray jsonArray) {
List<Map<String, Object>> mapList = new ArrayList<>();
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
Map<String, Object> map = jsonObjectToMap(jsonObject);
mapList.add(map);
}
return mapList;
}
/**
* json类型转map类型
* @param jsonObject
* @return
*/
private static Map<String, Object> jsonObjectToMap(JSONObject jsonObject) {
Map<String, Object> map = new HashMap<>();
for (String key : jsonObject.keySet()) {
Object value = jsonObject.get(key);
map.put(key, value);
}
return map;
}
}
4.调用工具类方法
public static void main(String[] args) {
String jsonResult = request("2023-07-06","Y");
System.out.println(jsonResult);
}
打印结果:2
搞定收工
希望可以帮助到您
~打工人冲啊~
.