JAVA判断当前时间是否为节假日、周末、工作日,调休日,不报错:IOException!

您所在的位置:网站首页 今天算法定节日吗为什么 JAVA判断当前时间是否为节假日、周末、工作日,调休日,不报错:IOException!

JAVA判断当前时间是否为节假日、周末、工作日,调休日,不报错:IOException!

2024-07-10 04:02| 来源: 网络整理| 查看: 265

JAVA判断当前时间是否为节假日、周末、工作日

在这里插入图片描述

需求

有这么个需求,需要判断传的这个日期是否为节假日,周末,工作日,然后做剩下的操作。

话不多说,上代码 1.首先需要拿到节假日api

节假日API地址

其实这个api里有接口可以直接判断某天是否为周末,节假日,工作日;但是这个接口访问多了会报一个403的错误,也就是请求太多导致的;而我下面的内容是只请求一次全年节假日即可,放到一个集合里,第二次请求判断的时候就可以直接去集合里判断。速度很快! 2.拿到自己适用接口,如下:

参数: 1》year:格式“yyyy”,查询这一年的节假日

https://timor.tech/api/holiday/year

返回数据示例:

{ "code": 0, "holiday": { "01-01": { "holiday": true, "name": "元旦", "wage": 3, "date": "2023-01-01", "rest": 1 }, "01-02": { "holiday": true, "name": "元旦", "wage": 2, "date": "2023-01-02", "rest": 1 }, "01-21": { "holiday": true, "name": "除夕", "wage": 3, "date": "2023-01-21", "rest": 2 }, ..........

截图如下

在这里插入图片描述

3.拿到项目中,编写成一个HolidayUtil 工具类,代码如下: /** * 判断今天是工作日/周末/节假日 工具类 * //0 上班 1周末 2节假日 */ public class HolidayUtil { static Map holiday =new HashMap();//假期 static Map extraWorkDay =new HashMap();//调休日 //判断是否为节假日 /** * * @param time 日期参数 格式‘yyyy-MM-dd’,不传参则默认当前日期 * @return */ public static String isWorkingDay(String time) throws ParseException { Date parse = null; //为空则返回当前时间 if (StringUtils.isNotBlank(time)){ SimpleDateFormat getYearFormat = new SimpleDateFormat("yyyy-MM-dd"); parse = getYearFormat.parse(time); }else { parse = new Date(); } String newDate = new SimpleDateFormat("yyyy").format(parse); //判断key是否有参数年份 if(!holiday.containsKey(newDate)){ String holiday = getYearHoliday(newDate); if ("No!".equals(holiday)){ return "该年份未分配日期安排!"; } } //得到日期是星期几 Date date = DateUtil.formatStringToDate(time, false); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int weekday = DateUtil.getDayOfWeek(calendar); //是否节假日 if(holiday.get(newDate).contains(time)){ return "2"; }else if(extraWorkDay.get(newDate).contains(time)){//是否为调休 return "0"; }else if(weekday == Calendar.SATURDAY || weekday == Calendar.FRIDAY){//是否为周末 return "1"; }else{ return "0"; } } /** * * @param date 日期参数 格式‘yyyy’,不传参则默认当前日期 * @return */ public static String getYearHoliday(String date) throws ParseException { //获取免费api地址 String httpUrl="https://timor.tech/api/holiday/year/"+date; BufferedReader reader = null; String result = null; StringBuffer sbf = new StringBuffer(); try { URL url = new URL(httpUrl); URLConnection connection = url.openConnection(); //connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); connection.setRequestProperty("User-Agent", "Mozilla/4.76"); //使用Get方式请求数据 //connection.setRequestMethod("GET"); //connection.connect(); InputStream is = connection.getInputStream(); reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); String strRead = null; while ((strRead = reader.readLine()) != null) { sbf.append(strRead); sbf.append("\r\n"); } reader.close(); //字符串转json JSONObject json = JSON.parseObject(sbf.toString()); //根据holiday字段获取jsonObject内容 JSONObject holiday = json.getJSONObject("holiday"); if (holiday.size() == 0){ return "No!"; } List hoList = new ArrayList(); List extraList = new ArrayList(); for (Map.Entry entry : holiday.entrySet()) { String value = entry.getValue().toString(); JSONObject jsonObject = JSONObject.parseObject(value); String hoBool = jsonObject.getString("holiday"); String extra = jsonObject.getString("date"); //判断不是假期后调休的班 if(hoBool.equals("true")){ hoList.add(extra); HolidayUtil.holiday.put(date,hoList); }else { extraList.add(extra); HolidayUtil.extraWorkDay.put(date,extraList); } } } catch (Exception e) { e.printStackTrace(); } return result; } }

DateUtil工具类,这里写了很多,可以把不需要的删除掉

/** * 日期工具 */ public class DateUtil { /** * 输出当天的时间,格式如:20151207 * * @return */ public static String today() { SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); return format.format(new Date()); } /** * 当前时间 * @return */ public static String currTime() { SimpleDateFormat sdfDetail = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date(); return sdfDetail.format(date); } /** * 当前年 * @return */ public static String currYear() { SimpleDateFormat sdfDetail = new SimpleDateFormat("yyyy"); Date date = new Date(); return sdfDetail.format(date); } public static String format(Date date, String tpl) { SimpleDateFormat format = new SimpleDateFormat(tpl); return format.format(date); } /** * 任意一天的开始时间 * * @return date */ public static Date startOfDay(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); Date returnDate = calendar.getTime(); return returnDate; } /** * 任意一天的结束时间 * * @return date */ public static Date endOfDay(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); calendar.set(Calendar.MILLISECOND, 999); Date returnDate = calendar.getTime(); return returnDate; } /** * 获取时间戳的开始时间 * @param timestamp */ public static Long startOfDayByTimestamp(Long timestamp) { Date date = new Date(timestamp); return startOfDay(date).getTime(); } /** * 获取时间戳的结束时间 * zg * @param timestamp */ public static Long endOfDayByTimestamp(Long timestamp) { Date date = new Date(timestamp); return endOfDay(date).getTime(); } /** * 当天的开始时间 * * @return */ public static Date startOfTodDay() { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); Date date = calendar.getTime(); return date; } /** * 当天的结束时间 * * @return */ public static Date endOfTodDay() { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); calendar.set(Calendar.MILLISECOND, 999); Date date = calendar.getTime(); return date; } /** * 昨天的开始时间 * * @return */ public static Date startOfyesterday() { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.add(Calendar.DATE, -1); calendar.set(Calendar.MILLISECOND, 0); Date date = calendar.getTime(); return date; } /** * 昨天的结束时间 * * @return */ public static Date endOfyesterday() { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); calendar.set(Calendar.MILLISECOND, 999); calendar.add(Calendar.DATE, -1); Date date = calendar.getTime(); return date; } /** * 功能:获取本周的开始时间 示例:2013-05-13 00:00:00 */ public static Date startOfThisWeek() {// 当周开始时间 Calendar currentDate = Calendar.getInstance(); currentDate.setFirstDayOfWeek(Calendar.MONDAY); currentDate.set(Calendar.HOUR_OF_DAY, 0); currentDate.set(Calendar.MINUTE, 0); currentDate.set(Calendar.SECOND, 0); currentDate.set(Calendar.MILLISECOND, 0); currentDate.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); Date date = currentDate.getTime(); return date; } /** * 功能:获取String日期对应的时间戳 * format 格式自定 * * @return */ public static Long formatStringToStamp(String base, String format) { DateFormat df = new SimpleDateFormat(format); Date baseTime; Long stamp = null; try { baseTime = df.parse(base); stamp = baseTime.getTime(); } catch (Exception e) { return null; } return stamp; } /** * 功能:获取String日期对应的时间 * isTotal = false ;yyyy-MM-dd格式限定 * isTotal = true ;yyyy-MM-dd hh-mm-ss格式限定 */ public static Date formatStringToDate(String base, Boolean isTotal) { String format = isTotal ? "yyyy-MM-dd hh-mm-ss" : "yyyy-MM-dd"; DateFormat df = new SimpleDateFormat(format); Date baseTime; try { baseTime = df.parse(base); } catch (Exception e) { return null; } return baseTime; } /** * 功能:获取本周的结束时间 示例:2013-05-19 23:59:59 */ public static Date endOfThisWeek() {// 当周结束时间 Calendar currentDate = Calendar.getInstance(); currentDate.setFirstDayOfWeek(Calendar.MONDAY); currentDate.set(Calendar.HOUR_OF_DAY, 23); currentDate.set(Calendar.MINUTE, 59); currentDate.set(Calendar.SECOND, 59); currentDate.set(Calendar.MILLISECOND, 999); currentDate.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); Date date = currentDate.getTime(); return date; } /** * 功能:获取本月的开始时间 */ public static Date startOfThisMonth() {// 当周开始时间 Calendar currentDate = Calendar.getInstance(); currentDate.set(Calendar.HOUR_OF_DAY, 0); currentDate.set(Calendar.MINUTE, 0); currentDate.set(Calendar.SECOND, 0); currentDate.set(Calendar.MILLISECOND, 0); currentDate.set(Calendar.DAY_OF_MONTH, 1); Date date = currentDate.getTime(); return date; } public static Date endOfThisMonth() { Calendar cal = Calendar.getInstance(); cal.set(Calendar.DAY_OF_MONTH, 1); cal.set(Calendar.HOUR_OF_DAY, 23); cal.set(Calendar.MINUTE, 59); cal.set(Calendar.SECOND, 59); cal.set(Calendar.MILLISECOND, 999); cal.add(Calendar.MONTH, 1); cal.add(Calendar.DATE, -1); Date date = cal.getTime(); return date; } /** * 功能:获取上月的开始时间 */ public static Date startOfLastMonth() {// 当周开始时间 Calendar currentDate = Calendar.getInstance(); currentDate.set(Calendar.HOUR_OF_DAY, 0); currentDate.set(Calendar.MINUTE, 0); currentDate.set(Calendar.SECOND, 0); currentDate.set(Calendar.MILLISECOND, 0); currentDate.set(Calendar.DAY_OF_MONTH, 1); currentDate.add(Calendar.MONTH, -1); Date date = currentDate.getTime(); return date; } /** * 功能:获取上月的结束时间 */ public static Date endOfLastMonth() { Calendar cal = Calendar.getInstance(); cal.set(Calendar.DAY_OF_MONTH, 1); cal.set(Calendar.HOUR_OF_DAY, 23); cal.set(Calendar.MINUTE, 59); cal.set(Calendar.SECOND, 59); cal.set(Calendar.MILLISECOND, 999); cal.add(Calendar.DATE, -1); Date date = cal.getTime(); return date; } private static final int[] DAY_OF_MONTH = new int[]{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; public static final String[] DATE_FORMATS = new String[]{"yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM-dd", "yyyy-MM", "yyyy-MM-dd HH:mm:ss.S", "yyyy年MM月dd日", "yyyy年MM月dd日 HH:mm", "yyyyMMdd", "yyyy年MM月dd日 HH:mm:ss", "MM.dd"}; /** * 将传入的日期转化为"yyyy-MM-dd"形式的字符串 * * @param dt 日期 * @return 指定日期格式的字符串 */ public static String formatDate(Date dt) { return formatDate("yyyy-MM-dd", dt); } /** * 将传入的日期转化为"yyyy-MM-dd HH:mm:ss"形式的字符串 * * @param dt 日期 * @return 指定日期格式的字符串 */ public static String formatDateYMDHMS(Date dt) { return formatDate("yyyy-MM-dd HH:mm:ss", dt); } /** * 将传入的日期转化为"yyyy-MM-dd HH:mm"形式的字符串 * * @param dt 日期 * @return 指定日期格式的字符串 */ public static String formatDateYMDHM(Date dt) { return formatDate("yyyy-MM-dd HH:mm", dt); } /** * 将传入的日期以指定格式转成字符串 * * @param format * @param dt * @return */ public static String formatDate(String format, Date dt) { if (dt == null) { return ""; } if (format.isEmpty()) { format = "yyyy-MM-dd"; } SimpleDateFormat fmt = new SimpleDateFormat(format); return fmt.format(dt); } /** * 将日期字符串转为日期 * * @param dateStr 日期字符串 * @return */ public static Date parseDate(String dateStr) { return parseDate(dateStr, DATE_FORMATS); } /** * 将日期字符串转为指定格式的日期 * * @param dateStr 日期字符串 * @param format 日期格式 * @return */ public static Date parseDate(String dateStr, String format) { return parseDate(dateStr, new String[]{format}); } private static Date parseDate(String dateStr, String[] parsePatterns) { try { return DateUtils.parseDate(dateStr, parsePatterns); } catch (ParseException e) { e.printStackTrace(); return null; } } /** * 获取今天的日期 * * @return */ public static Date getToday() { Calendar cal = Calendar.getInstance(); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); return cal.getTime(); } /** * 得到传入日期n天后的日期,如果传入日期为null,则表示当前日期n天后的日期 * * @param dt 日期 * @param days 可以为任何整数,负数表示前days天,正数表示后days天 * @return Date */ public static Date getAddDayDate(Date dt, int days) { Calendar cal = Calendar.getInstance(); if (dt != null) { cal.setTime(dt); } cal.add(Calendar.DAY_OF_MONTH, days); return cal.getTime(); } /** * 得到当前日期几天后(plusDays>0)or 几天前(plusDays 0) { pastTime = hours + "小时前"; } else if ((mins = getMinuteBetween(current, createTime)) > 0) { pastTime = mins + "分钟前"; } else { long seconds = getSecondBetweem(current, createTime); if (seconds > 5) { pastTime = seconds + "秒前"; } else { pastTime = "刚刚"; } } return pastTime; } /** * 获取从今天开始未来一周的星期和日期的映射表 1-星期一:2014-05-12,2-星期二:2014-05-13..... * * @return */ public static Map getDateForWeekDay() { Map weekDayDateMap = new HashMap(); Calendar calendar = Calendar.getInstance(); for (int i = 1; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3