package com.dg.core.util; import cn.hutool.core.date.DateTime; import com.alibaba.fastjson.JSONObject; import com.iceyyy.workday.WorkUtils; import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; import com.squareup.okhttp.Response; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.*; /** *

TestDate 此类用于:

*

@author:hujm

*

@date:2021年04月22日 17:43

*

@remark:

*/ public class TestDate { public static void main(String[] args) { System.out.println(getJjr(2021, 4)); System.out.println(getMonthWekDay(2021, 4)); System.out.println(JJR(2021, 4)); } /** * 获取周末和节假日 * * @param year * @param month * @return */ public static Set JJR(int year, int month) { //获取所有的周末 Set 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> holiday = (Map>) jjr.get("holiday"); Set strings = holiday.keySet(); for (String str : strings) { Map 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; } /** * 获取节假日不含周末 * * @param year * @param month * @return */ private static Map getJjr(int year, int month) { String url = "http://timor.tech/api/holiday/year/"; 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); } /** * 获取节假日不含周末 * * @return */ public Map getWeather(String code) { String url = "https://restapi.amap.com/v3/weather/weatherInfo?key=9e0d819935da8a01de0e476ba8a9019e&city="+code; 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开始 * * @param year * @param mouth * @return */ public static Set getMonthWekDay(int year, int mouth) { Set 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; } /** * 判断该日期是否为工作日 * * @param dateTime * @return */ public Boolean isWeekday(DateTime dateTime){ TestDate td=new TestDate(); Calendar calendar = Calendar.getInstance(); calendar.setTime(dateTime); Set jjr = td.JJR(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH)); String strdate = dateTime.toString("yyyy-MM-dd"); for (String ans: jjr ) { if (ans.equals(strdate)) return false; } return true; } /** * 获取该日期的下个工作日是多少 * * @param dateTime * @return */ public DateTime nextWeekDay(DateTime dateTime){ Calendar calendar = Calendar.getInstance(); calendar.setTime(dateTime); while (true){ calendar.add(calendar.DATE,1); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); String dateTimeToday = sdf.format(calendar.getTime()); if (!WorkUtils.isWorkendDay(dateTimeToday)){ return new DateTime(calendar);//返回日期 } } } }