Java小程序怎么实现获取国家节假日
发表于:2024-11-25 作者:千家信息网编辑
千家信息网最后更新 2024年11月25日,本篇内容主要讲解"Java小程序怎么实现获取国家节假日",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Java小程序怎么实现获取国家节假日"吧!前言此节假日
千家信息网最后更新 2024年11月25日Java小程序怎么实现获取国家节假日
本篇内容主要讲解"Java小程序怎么实现获取国家节假日",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Java小程序怎么实现获取国家节假日"吧!
前言
此节假日为严格按照国家要求的双休和法定节假日并且包含节假日的补班信息,大家可根据自己的需求自定义处理哦。
以下为Maven配置,是程序用到的依赖。版本的话,可以用最新的。
Maven配置
com.squareup.okhttp okhttp ${okhttp.version} com.alibaba fastjson ${fastjson.version}
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.*; /** * 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); } /** * 获取周末 月从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; } }
以上方法可以拿来即用,当然也可以根据自己的需求自定义。
以下是我自己业务需求,将调用API接口获取的节假日信息保存到本地数据库中,如果不感兴趣可以跳过以下内容哦~~~~
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; /** * NoSubmitTask 此类用于:
* @author:hujm
* @date:2021年04月16日 17:10
* @remark:
*/@Slf4j@Componentpublic class NoSubmitTask { @Resource private DailyHolidayConfigService holidayConfigService; @Value("${syncAddress}") private String syncAddress; @Scheduled(cron = "${syncHolidayDeadline}") public void syncHoliday() { log.info("每年12月28凌晨1点定时同步下一年的节假日信息,同步节假日开始时间 = {}", DateUtil.formatDateTime(new Date())); String url = syncAddress; 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(); } 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("获取节假日数据内容为 jsonString = 【{}】", jsonString); Set> entrySet = holidayJson.entrySet(); List rawInfoList = new ArrayList<>(); for (Map.Entry 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); } // 定义节假日集合 List 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); } // 根据日期排序升序 List collect = holidayConfigList.stream().sorted(Comparator.comparing(DailyHolidayConfig::getHolidayDate)).collect(Collectors.toList()); // 批量插入节假日表中 holidayConfigService.insertBatch(collect); } else { log.error("E|NoSubmitTask|syncHoliday()|同步节假日信息时,调用节假日网站服务出错!"); } } log.info("每年12月28凌晨1点定时同步下一年的节假日信息,同步节假日结束时间 = {}", DateUtil.formatDateTime(new Date())); }}
到此,相信大家对"Java小程序怎么实现获取国家节假日"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
程序
信息
同步
国家
内容
数据
需求
兴趣
方法
时间
网站
学习
配置
实用
更深
业务
严格按照
前言
升序
地址
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
速拍网络技术有限公司怎么样
阳江卫星软件开发费用
我的世界服务器命令方块不能用
王国纪元有哪些服务器
金蝶对数据库进行连接
i5服务器连接失败
默纳克服务器怎么调电机
软件开发项目售后保障
饥荒联机版专用服务器怎么租
江苏宿迁服务器租用云空间
最常用的数据库管理软件
设计师用什么服务器
网络安全手抄报文明上网快乐成长
计算机三级网络技术题库有多少题
城阳区定制软件开发哪家好
计算机三级考试网络技术复习
高斯数据库日期毫秒转换
如何将数据库放在一个盘
连接文件服务器
2021网络安全活动周的主题
朗新科技属于工业互联网吗
tek串口服务器怎么建虚拟串口
服务器的安全
河南恩诺网络技术
服务器安全狗 离线
sql数据库计算列怎么添加
mysql数据库建表授权
七年级网络安全班会记录
阿里云 搭建服务器
c 数据库链接是否成功