教你怎么用Java获取国家法定节假日
更新时间:2021年4月23日 20:02 点击:4238
前言
此节假日为严格按照国家要求的双休和法定节假日并且包含节假日的补班信息,大家可根据自己的需求自定义处理哦。
以下为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)); } /** * 获取周末和节假日 * * @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"); //筛选掉补班 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<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; } }
以上方法可以拿来即用,当然也可以根据自己的需求自定义。
以下是我自己业务需求,将调用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; /** * <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点定时同步下一年的节假日信息,同步节假日开始时间 = {}", 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<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); } // 定义节假日集合 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); } // 根据日期排序升序 List<DailyHolidayConfig> 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获取国家法定节假日的文章就介绍到这了,更多相关java获取国家法定节假日内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!
上一篇: Java基础之练习打印三角形
相关文章
- 这篇文章主要介绍了如何利用java语言实现经典《复杂迷宫》游戏,文中采用了swing技术进行了界面化处理,感兴趣的小伙伴可以动手试一试...2022-02-01
java 运行报错has been compiled by a more recent version of the Java Runtime
java 运行报错has been compiled by a more recent version of the Java Runtime (class file version 54.0)...2021-04-01- 这篇文章主要介绍了在java中获取List集合中最大的日期时间操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
- 这篇文章主要介绍了Java如何发起http请求的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-31
- 这篇文章主要介绍了教你怎么用Java获取国家法定节假日,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下...2021-04-23
- 说起C#和Java这两门语言(语法,数据类型 等),个人以为,大概有90%以上的相似,甚至可以认为几乎一样。但是在工作中,我也发现了一些细微的差别...2020-06-25
- 这篇文章主要介绍了.NET/C# 使用Stopwatch测量运行时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
mysql中获取一天、一周、一月时间数据的各种sql语句写法
创建表:复制代码 代码如下:create table if not exists t( id int, addTime datetime default '0000-00-00 00:00:00′)添加两条初始数据:insert t values(1, '2012-07-12 21:00:00′);insert t values(2, '2012-07...2014-05-31- 这篇文章主要介绍了解决Java处理HTTP请求超时的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-29
- 这篇文章主要介绍了java 判断两个时间段是否重叠的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
- 这篇文章主要介绍了超简洁java实现双色球若干注随机号码生成(实例代码),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-02
java 画pdf用itext调整表格宽度、自定义各个列宽的方法
这篇文章主要介绍了java 画pdf用itext调整表格宽度、自定义各个列宽的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-31- 这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
- 这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
Java使用ScriptEngine动态执行代码(附Java几种动态执行代码比较)
这篇文章主要介绍了Java使用ScriptEngine动态执行代码,并且分享Java几种动态执行代码比较,需要的朋友可以参考下...2021-04-15- 这篇文章主要介绍了Java开发实现人机猜拳游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-03
- 常用的日期时间正则表达式 下面收藏了大量的日期时间正则匹配函数,包括分钟,时间与秒都能达到。 正则表达式 (?n:^(?=d)((?<day>31(?!(.0?[2469]|11))|30(?!.0?2)|29(...2016-11-25
- 这篇文章主要介绍了Java List集合返回值去掉中括号('[ ]')的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-29
Java中lombok的@Builder注解的解析与简单使用详解
这篇文章主要介绍了Java中lombok的@Builder注解的解析与简单使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-01-06- 实例讲解之前,先来介绍几个核心函数: mktime 函数 mktime() 函数返回一个日期的 Unix 时间戳。 参数总是表示 GMT 日期,因此 is_dst 对结果没有影响。 参数可以从右到左依次空着,空着的参数会被设为相应的当前 GMT 值。...2015-11-08