您好,登錄后才能下訂單哦!
這篇文章主要介紹了如何使用Java獲取國(guó)家法定節(jié)假日,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
Java是一門(mén)面向?qū)ο缶幊陶Z(yǔ)言,可以編寫(xiě)桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序。
<!-- 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>
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開(kāi)始 * * @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; } }
以上方法可以拿來(lái)即用,當(dāng)然也可以根據(jù)自己的需求自定義。
以下是我自己業(yè)務(wù)需求,將調(diào)用API接口獲取的節(jié)假日信息保存到本地?cái)?shù)據(jù)庫(kù)中,如果不感興趣可以跳過(guò)以下內(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é)假日開(kāi)始時(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())); } }
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“如何使用Java獲取國(guó)家法定節(jié)假日”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。