教你怎么用Java獲取國家法定節(jié)假日
前言
此節(jié)假日為嚴(yán)格按照國家要求的雙休和法定節(jié)假日并且包含節(jié)假日的補(bǔ)班信息,大家可根據(jù)自己的需求自定義處理哦。
以下為Maven配置,是程序用到的依賴。版本的話,可以用最新的。
Maven配置
<!-- okhttp --> <dependency> <groupId>com.squareup.okhttp</groupId> <artifactId>okhttp</artifactId> <version>${okhttp.version}</version> </dependency> <!-- fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version> </dependency>
Java程序
package com.uiotsoft.daily.task; import com.alibaba.fastjson.JSONObject; 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.*; /** * <p>TestDate 此類用于:</p> * <p>@author:hujm</p> * <p>@date:2021年04月22日 17:43</p> * <p>@remark:</p> */ 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)); } /** * 獲取周末和節(jié)假日 * * @param year * @param month * @return */ 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"); //篩選掉補(bǔ)班 if (wage.equals(1)) { monthWekDay.remove(date); } else { monthWekDay.add(date); } } return monthWekDay; } /** * 獲取節(jié)假日不含周末 * * @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; //解密數(shù)據(jù) 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<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; } }
以上方法可以拿來即用,當(dāng)然也可以根據(jù)自己的需求自定義。
以下是我自己業(yè)務(wù)需求,將調(diào)用API接口獲取的節(jié)假日信息保存到本地?cái)?shù)據(jù)庫中,如果不感興趣可以跳過以下內(nèi)容哦~~~~
package com.uiotsoft.daily.task; import cn.hutool.core.date.DateUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONObject; import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; import com.squareup.okhttp.Response; import com.uiotsoft.daily.module.entity.DailyHolidayConfig; import com.uiotsoft.daily.module.entity.HolidayRawInfo; import com.uiotsoft.daily.module.service.DailyHolidayConfigService; import com.uiotsoft.daily.module.service.TaskService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.io.IOException; import java.util.*; import java.util.stream.Collectors; /** * <p>NoSubmitTask 此類用于:</p> * <p>@author:hujm</p> * <p>@date:2021年04月16日 17:10</p> * <p>@remark:</p> */ @Slf4j @Component public class NoSubmitTask { @Resource private DailyHolidayConfigService holidayConfigService; @Value("${syncAddress}") private String syncAddress; @Scheduled(cron = "${syncHolidayDeadline}") public void syncHoliday() { log.info("每年12月28凌晨1點(diǎn)定時(shí)同步下一年的節(jié)假日信息,同步節(jié)假日開始時(shí)間 = {}", DateUtil.formatDateTime(new Date())); String url = syncAddress; OkHttpClient client = new OkHttpClient(); Response response; //解密數(shù)據(jù) 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(); } Map map = JSONObject.parseObject(rsa, Map.class); if (map != null) { Integer code = (Integer) map.get("code"); if (code == 0) { JSONObject holidayJson = (JSONObject) map.get("holiday"); String jsonString = holidayJson.toJSONString(); log.info("獲取節(jié)假日數(shù)據(jù)內(nèi)容為 jsonString = 【{}】", jsonString); Set<Map.Entry<String, Object>> entrySet = holidayJson.entrySet(); List<HolidayRawInfo> rawInfoList = new ArrayList<>(); for (Map.Entry<String, Object> entry : entrySet) { String key = entry.getKey(); Object value = entry.getValue(); cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(value); HolidayRawInfo holidayRawInfo = JSONUtil.toBean(jsonObject, HolidayRawInfo.class); rawInfoList.add(holidayRawInfo); } // 定義節(jié)假日集合 List<DailyHolidayConfig> holidayConfigList = new ArrayList<>(); for (HolidayRawInfo holidayRawInfo : rawInfoList) { DailyHolidayConfig holidayConfig = new DailyHolidayConfig(); holidayConfig.setHolidayTarget(holidayRawInfo.getTarget()); holidayConfig.setHolidayAfter(holidayRawInfo.getAfter()); holidayConfig.setHolidayDate(holidayRawInfo.getDate()); holidayConfig.setHolidayName(holidayRawInfo.getName()); holidayConfig.setHolidayRest(holidayRawInfo.getRest()); holidayConfig.setHolidayWage(holidayRawInfo.getWage()); holidayConfig.setCreateTime(new Date()); holidayConfigList.add(holidayConfig); } // 根據(jù)日期排序升序 List<DailyHolidayConfig> collect = holidayConfigList.stream().sorted(Comparator.comparing(DailyHolidayConfig::getHolidayDate)).collect(Collectors.toList()); // 批量插入節(jié)假日表中 holidayConfigService.insertBatch(collect); } else { log.error("E|NoSubmitTask|syncHoliday()|同步節(jié)假日信息時(shí),調(diào)用節(jié)假日網(wǎng)站服務(wù)出錯(cuò)!"); } } log.info("每年12月28凌晨1點(diǎn)定時(shí)同步下一年的節(jié)假日信息,同步節(jié)假日結(jié)束時(shí)間 = {}", DateUtil.formatDateTime(new Date())); } }
到此這篇關(guān)于教你怎么用Java獲取國家法定節(jié)假日的文章就介紹到這了,更多相關(guān)java獲取國家法定節(jié)假日內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot分頁的實(shí)現(xiàn)與long型id精度丟失問題的解決方案介紹
在以后的開發(fā)中,當(dāng)全局唯一id的生成策略生成很長的Long型數(shù)值id之后會(huì)超過JS對Long型數(shù)據(jù)處理的能力范圍,可能發(fā)生精度丟失而造成后端方法失效,我們要學(xué)會(huì)解決。分頁功能雖然簡單但是非常重要,對于剛接觸項(xiàng)目的人一定要重點(diǎn)注意2022-10-10mybatis plus開發(fā)過程中遇到的問題記錄及解決
這篇文章主要介紹了mybatis plus開發(fā)過程中遇到的問題記錄及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07Java 中String StringBuilder 與 StringBuffer詳解及用法實(shí)例
這篇文章主要介紹了Java 中String StringBuilder 與 StringBuffer詳解及用法實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-02-02Java中生成隨機(jī)數(shù)的4種方式與區(qū)別詳解
生成隨機(jī)數(shù)是我們?nèi)粘i_發(fā)經(jīng)常會(huì)遇到的一個(gè)功能,這篇文章主要給大家介紹了關(guān)于Java中生成隨機(jī)數(shù)的4種方式與區(qū)別、應(yīng)用場景的相關(guān)資料,4個(gè)方式分別是Random、ThreadLocalRandom、SecureRandom以及Math,需要的朋友可以參考下2021-06-06IDEA Debug啟動(dòng)tomcat報(bào)60659端口占用錯(cuò)誤的解決
工作中將開發(fā)工具由Eclipse轉(zhuǎn)為IntelliJ IDEA,在使用過程中遇到許多問題,其中60659端口占用錯(cuò)誤對于不熟悉IDEA的開發(fā)者來說或許會(huì)比較頭痛,本文就來解決一下這個(gè)問題2018-11-11