如何用JAVA判断当前时间是否为节假日、周末、工作日及调休日(不报错:IOException!)
作者:牛·云说
最近公司有个业务需要判断工作日,但是每年的节假日不一样,下面这篇文章主要给大家介绍了关于如何用JAVA判断当前时间是否为节假日、周末、工作日及调休日的相关资料,且不报错:IOException!,需要的朋友可以参考下
需求
有这么个需求,需要判断传的这个日期是否为节假日,周末,工作日,然后做剩下的操作。
话不多说,上代码
1.首先需要拿到节假日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<String,List<String>> holiday =new HashMap<>();//假期 static Map<String,List<String>> 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<String, Object> 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)的指定格式的字符串日期 * * @param dt * @param plusDays * @param dateFormat * @return */ public static String getAddDayDateFromToday(int plusDays, String dateFormat) { Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_MONTH, plusDays); return formatDate(dateFormat, cal.getTime()); } /** * 给定的时间再加上指定小时数,如果传入日期为null,能以当前时间计算 * * @param dt * @param hours * @return * @author Alex Zhang */ public static Date getAddHourDate(Date dt, int hours) { if (dt == null) dt = new Date(System.currentTimeMillis()); Calendar cal = Calendar.getInstance(); cal.setTime(dt); cal.add(Calendar.HOUR, hours); return cal.getTime(); } /** * 给定的时间再加上指定分钟数 * * @param dt * @param minutes * @return */ public static Date getAddMinuteDate(Date dt, int minutes) { if (dt == null) dt = new Date(System.currentTimeMillis()); Calendar cal = Calendar.getInstance(); cal.setTime(dt); cal.add(Calendar.MINUTE, minutes); return cal.getTime(); } /** * 给定的时间再加上指定月份数 * * @param dt * @param months * @return */ public static Date getAddMonthDate(Date dt, int months) { if (dt == null) dt = new Date(System.currentTimeMillis()); Calendar cal = Calendar.getInstance(); cal.setTime(dt); cal.add(Calendar.MONTH, months); return cal.getTime(); } /** * 给定的时间再加上指定年 * @param dt * @param year * @return */ public static Date getAddYearDate(Date dt, int year) { if (dt == null) dt = new Date(System.currentTimeMillis()); Calendar cal = Calendar.getInstance(); cal.setTime(dt); cal.add(Calendar.YEAR, year); return cal.getTime(); } /** * 获得某天的零点时刻0:0:0 * * @param date 日期 * @return */ public static Date getDayBegin(Date date) { if (date == null) return null; Calendar cal = Calendar.getInstance(); cal.setTime(date); 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(); } /** * 获得某天的截至时刻23:59:59 * * @param date * @return */ public static Date getDayEnd(Date date) { if (date == null) return null; Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(Calendar.HOUR_OF_DAY, 23); cal.set(Calendar.MINUTE, 59); cal.set(Calendar.SECOND, 59); cal.set(Calendar.MILLISECOND, 999); return cal.getTime(); } /** * 某月的起始时间,eg:param:2011-11-10 12:10:50.999, return:2011-11-1 00:00:00.000 */ public static Date getMonthBeginTime(Date dt) { if (dt == null) dt = new Date(System.currentTimeMillis()); Calendar cal = Calendar.getInstance(); cal.setTime(dt); cal.set(Calendar.DAY_OF_MONTH, 1); 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(); } /** * 某月的截止时间,eg:param:2011-11-10 12:10:50.999, return:2011-11-30 23:59:59.999 */ public static Date getMonthEndTime(Date dt) { if (dt == null) dt = new Date(System.currentTimeMillis()); Calendar cal = Calendar.getInstance(); cal.setTime(dt); cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) + 1); cal.set(Calendar.DAY_OF_MONTH, 1); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, -1); return cal.getTime(); } /** * 获得传入日期的年\月\日,以整型数组方式返回 * * @param dt * @return int[] */ public static int[] getTimeArray(Date dt) { if (dt == null) dt = new Date(System.currentTimeMillis()); int[] timeArray = new int[3]; Calendar cal = Calendar.getInstance(); cal.setTime(dt); timeArray[0] = cal.get(Calendar.YEAR); timeArray[1] = cal.get(Calendar.MONTH) + 1; timeArray[2] = cal.get(Calendar.DAY_OF_MONTH); return timeArray; } /** * 获得传入日期的年\月\日\小时\分,以整型数组方式返回 * * @param dt * @return */ public static int[] timeArray(Date dt) { if (dt == null) dt = new Date(System.currentTimeMillis()); int[] timeArray = new int[5]; Calendar cal = Calendar.getInstance(); cal.setTime(dt); timeArray[0] = cal.get(Calendar.YEAR); timeArray[1] = cal.get(Calendar.MONTH) + 1; timeArray[2] = cal.get(Calendar.DAY_OF_MONTH); timeArray[3] = cal.get(Calendar.HOUR_OF_DAY); timeArray[4] = cal.get(Calendar.MINUTE); return timeArray; } /** * 根据年月日得到Date类型时间 * * @param year * @param month * @param day * @return Date */ public static Date getTime(Integer year, Integer month, Integer day) { Calendar cal = Calendar.getInstance(); if (year != null) cal.set(Calendar.YEAR, year); if (month != null) cal.set(Calendar.MONTH, month - 1); if (day != null) cal.set(Calendar.DAY_OF_MONTH, day); return cal.getTime(); } /** * @param parrern 格式化字符串 例如:yyyy-MM-dd * @param str 时间字符串 例如:2007-08-01 * @return 出错返回null * 通过格式化字符串得到时间 */ public static Date getDateFromPattern(String parrern, String str) { SimpleDateFormat fmt = new SimpleDateFormat(parrern); try { return fmt.parse(str); } catch (ParseException e) { e.printStackTrace(); } return null; } /** * 计算两个日期间相隔的小时 * * @param d1 日期1 * @param d2 日期2 * @return */ public static int getHourBetween(Date d1, Date d2) { long m = d1.getTime(); long n = d2.getTime(); return (int) ((m - n) / 3600000); } /** * 取得两个时间之间的天数,可能是负数(第二个时间的日期小于第一个时间的日期)。如果两个时间在同一天,则返回0 * * @param d1 第一个时间 * @param d2 第二个时间 * @return * @author Derek * @version 1.0 2009-10-14 */ public static int getDayBetween(Date d1, Date d2) { Calendar c1 = Calendar.getInstance(); c1.setTime(d1); Calendar c2 = Calendar.getInstance(); c2.setTime(d2); return (int) ((c2.getTimeInMillis() - c1.getTimeInMillis()) / 86400000); } /** * 计算两个日期间相隔的秒数 * * @param d1 日期1 * @param d2 日期2 * @return */ public static long getSecondBetweem(Date d1, Date d2) { return (d1.getTime() - d2.getTime()) / 1000; } /** * 计算两个日期间相隔的月份数 * * @param d1 日期1 * @param d2 日期2 * @return */ public static int getMonthBetween(Date d1, Date d2) { Calendar c1 = Calendar.getInstance(); Calendar c2 = Calendar.getInstance(); c1.setTime(d1); c2.setTime(d2); return (c1.get(Calendar.YEAR) - c2.get(Calendar.YEAR)) * 12 + (c1.get(Calendar.MONTH) - c2.get(Calendar.MONTH)); } /** * 通过生日得到当前年龄 * * @param birthDay 以字符串表示的生日 * @return 返回以以字符串表示的年龄, 最小为0 */ public static String getAge(String birthDay) { if (birthDay.startsWith("0000")) { return "未知"; } if (!birthDay.matches("[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}")) { return "未知"; } return getAge(parseDate(birthDay, "yyyy-MM-dd")); } /** * 通过生日得到当前年龄 * * @param birthDate 以日期表示的生日 * @return 返回以以字符串表示的年龄, 最小为0 */ public static String getAge(Date birthDate) { if (birthDate == null) { return "未知"; } Calendar cal = Calendar.getInstance(); if (cal.before(birthDate)) { throw new IllegalArgumentException("The birthDay is before Now. It is unbelievable!"); } int yearNow = cal.get(Calendar.YEAR); int monthNow = cal.get(Calendar.MONTH); int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH); cal.setTime(birthDate); int yearBirth = cal.get(Calendar.YEAR); int monthBirth = cal.get(Calendar.MONTH); int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH); int age = yearNow - yearBirth; if (monthNow <= monthBirth) { if (monthNow == monthBirth) { if (dayOfMonthNow < dayOfMonthBirth) { age--; } else { } } else { age--; } } else { } return age + ""; } @SuppressWarnings("deprecation") public static int getIntAge(Date brithday) { if (brithday != null) { int dateMiss = Calendar.getInstance().getTime().getDate() - brithday.getDate();// 日差距 int monthMiss = Calendar.getInstance().getTime().getMonth() - brithday.getMonth();// 月份差距 int yearMiss = Calendar.getInstance().getTime().getYear() - brithday.getYear();// 年份差距 if (monthMiss > 0 || (monthMiss == 0 && dateMiss >= 0)) { return yearMiss; } else { return yearMiss - 1;// 周岁少两岁,SO在去掉一年 } } return 0; } /** * 根据周几的数字标记获得周几的汉字描述 */ public static String getCnWeekDesc(int weekNum) { String strWeek = ""; switch (weekNum) { case 1: strWeek = "周一"; break; case 2: strWeek = "周二"; break; case 3: strWeek = "周三"; break; case 4: strWeek = "周四"; break; case 5: strWeek = "周五"; break; case 6: strWeek = "周六"; break; case 7: strWeek = "周日"; break; } return strWeek; } /** * 获得"上下午"标识 * * @param date * @return */ public static String getCnAMPM(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); if (Calendar.AM == cal.get(Calendar.AM_PM)) return "上午"; else return "下午"; } /** * 判断两个日期是否相等 * * @param d1 日期1 * @param d2 日期2 * @return */ public static boolean isTimeEquals(Date d1, Date d2) { if (d1 == null || d2 == null) return false; return Math.abs(d1.getTime() - d2.getTime()) < 50; } /** * 获取一个日期的年份 * * @param date 日期 * @return */ public static int getYear(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); return cal.get(Calendar.YEAR); } /** * 获取一个日期的月份 * * @param date 日期 * @return */ public static int getMonthOfYear(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); return cal.get(Calendar.MONTH); } /** * 获取一个日期的天数 * * @param date * @return */ public static int getDay(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.DAY_OF_MONTH); } /** * 获取一个日期的小时数 * * @param date * @return */ public static int getHour(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.HOUR_OF_DAY); } /** * 获取一个日期的分钟 * * @param date 日期 * @return */ public static int getMinute(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.MINUTE); } /** * 获取一个日期的秒数 * * @param date 日期 * @return */ public static int getSecond(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.SECOND); } /** * 获取一个月的最大天数 * * @param year 年份 * @param month 月份 * @return */ public static int getMaxDayOfMonth(int year, int month) { if (month == 1 && isLeapYear(year)) { return 29; } return DAY_OF_MONTH[month]; } /** * 判断是否是润年 * * @param year 年份 * @return */ public static boolean isLeapYear(int year) { Calendar calendar = Calendar.getInstance(); return ((GregorianCalendar) calendar).isLeapYear(year); } /** * 得到本周的起始时间 * * @param currentDate * @return */ public static Date getBeginDateofThisWeek(Date currentDate) { Calendar current = Calendar.getInstance(); current.setTime(currentDate); int dayOfWeek = current.get(Calendar.DAY_OF_WEEK); if (dayOfWeek == 1) { // 如果是星期天,星期一则往前退6天 current.add(Calendar.DAY_OF_MONTH, -6); } else { current.add(Calendar.DAY_OF_MONTH, 2 - dayOfWeek); } current.set(Calendar.HOUR_OF_DAY, 0); current.set(Calendar.MINUTE, 0); current.set(Calendar.SECOND, 0); current.set(Calendar.MILLISECOND, 0); return current.getTime(); } @SuppressWarnings("deprecation") public static void main(String[] args) { Date addYearDate = getAddYearDate(new Date(), 2); System.out.println(formatDateYMDHMS(addYearDate)); } /** * 转化时间从指定格式日期为长整形 * * @param format * @param time * @return */ public static Long convertDateStringToDateLong(String format, String time) throws ParseException { if (time == null || time.trim().equals("")) { return null; } SimpleDateFormat fmt = new SimpleDateFormat(format); Date d = fmt.parse(time); return d.getTime(); } /** * 获得指定格式日期 * * @param date 日期 * @param format 指定格式 * @return */ public static Date getFormatDate(Date date, String format) { if (null == date) { return null; } if (null == format) { return parseDate(formatDate("yyyy-MM-dd", date), "yyyy-MM-dd"); } return parseDate(formatDate(format, date), format); } public static int getMinuteBetween(Date d1, Date d2) { if (d1 == null || d2 == null) return 0; long m = d1.getTime(); long n = d2.getTime(); return (int) ((m - n) / 60000); } /** * 计算创建时间到现在过去多久了 * * @param createTime * @return */ public static String getPastTime(Date createTime) { String pastTime; Date current = new Date(); int days = getDayBetween(current, createTime); int hours = 0; int mins = 0; if (days > 0) { pastTime = "1天前"; } else if ((hours = getHourBetween(current, createTime)) > 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<String, Date> getDateForWeekDay() { Map<String, Date> weekDayDateMap = new HashMap<String, Date>(); Calendar calendar = Calendar.getInstance(); for (int i = 1; i <= 7; i++) { int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1; if (dayOfWeek == 0) { dayOfWeek = 7; } weekDayDateMap.put(dayOfWeek + "", calendar.getTime()); calendar.add(Calendar.DAY_OF_MONTH, 1); } return weekDayDateMap; } /** * 获得本日星期数,星期一:1,星期日:7 如果传入null则默认为本日 * * @return */ public static int getDayOfWeek(Calendar calendar) { int today; if (calendar != null) { today = calendar.get(Calendar.DAY_OF_WEEK); } else { today = Calendar.getInstance().get(Calendar.DAY_OF_WEEK); } if (today == 1) return 7; else return today - 1; } /** * 获取日期的中国式星期几(1-7分别代表周一至周日) * * @param date * @return */ public static int getDayOfWeek(Date date) { if (date == null) { date = new Date(); } Calendar cal = Calendar.getInstance(); cal.setTime(date); return getDayOfWeek(cal); } /** * 判断两个日期是否为同一天 * * @param date1 * @param date2 * @return */ public static boolean isSameDate(Date date1, Date date2) { if (date1 == null || date2 == null) { return false; } Calendar calendar1 = Calendar.getInstance(); Calendar calendar2 = Calendar.getInstance(); calendar1.setTime(date1); calendar2.setTime(date2); if (calendar1.get(Calendar.YEAR) == calendar2.get(Calendar.YEAR) && calendar1.get(Calendar.MONTH) == calendar2.get(Calendar.MONTH) && calendar1.get(Calendar.DAY_OF_MONTH) == calendar2.get(Calendar.DAY_OF_MONTH)) { return true; } return false; } public static String formatDuration(long duration) { float secondUnit = 1000; String formatDuration = ""; DecimalFormat decimalFormat = new DecimalFormat(".00"); if (duration < secondUnit) { formatDuration = duration + "(毫秒)"; } else if (duration < secondUnit * 60) { formatDuration = decimalFormat.format(duration / secondUnit) + "(秒)"; } else if (duration < secondUnit * 3600) { formatDuration = decimalFormat.format(duration / (secondUnit * 60)) + "(分钟)"; } else if (duration < secondUnit * 3600 * 60) { formatDuration = decimalFormat.format(duration / (secondUnit * 3600)) + "(小时)"; } else { formatDuration = decimalFormat.format(duration / (secondUnit * 3600 * 24)) + "(天)"; } return formatDuration; } public static long getTodayBeginTime() { return getDayBegin(new Date()).getTime(); } public static long getTodayEndTime() { return getDayEnd(new Date()).getTime(); } /** * 比较两个时间大小 * * @param startTime * @param endTime * @return int * @method compareDate() */ public static int compareDate(String startTime, String endTime) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date d1 = sdf.parse(startTime); Date d2 = sdf.parse(endTime); return d1.compareTo(d2); } /** * 是否是一个日期格式 * @param time * @param pattern * @return */ public static boolean isTime(String time,String pattern) { SimpleDateFormat sdf = new SimpleDateFormat(pattern); try { sdf.setLenient(false); sdf.parse(time); } catch (ParseException e) { return false; } return true; } /** * 转换时间标准格式 yyyy-MM-dd HH:mm:ss */ public static final ThreadLocal<DateFormat> yMdHms = new ThreadLocal<DateFormat>() { @Override protected DateFormat initialValue() { return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); } }; /** * 转换时间标准格式 yyyy-MM-dd */ public static final ThreadLocal<DateFormat> yMd = new ThreadLocal<DateFormat>() { @Override protected DateFormat initialValue() { return new SimpleDateFormat("yyyy-MM-dd"); } }; /** * 转换时间标准格式 yyyy-MM-dd HH:mm */ public static final ThreadLocal<DateFormat> yMdHm = new ThreadLocal<DateFormat>() { @Override protected DateFormat initialValue() { return new SimpleDateFormat("yyyy-MM-dd HH:mm"); } }; /** * 校验时间冲突 * @param dateA 2021-02-08 13:00~2021-02-08 13:00 * @param dateB 2021-02-08 13:00~2021-02-08 13:00 * @return 冲突返回true,不冲突返回false */ public static Boolean checkDateConflict(String dateA, String dateB) { List<String> dateAList = new ArrayList<>(Arrays.asList(dateA.split("~"))); List<String> dateBList = new ArrayList<>(Arrays.asList(dateB.split("~"))); try { Date dateA1 = DateUtil.yMdHm.get().parse(dateAList.get(0)); Date dateA2 = DateUtil.yMdHm.get().parse(dateAList.get(1)); Date dateB1 = DateUtil.yMdHm.get().parse(dateBList.get(0)); Date dateB2 = DateUtil.yMdHm.get().parse(dateBList.get(1)); //dateA开始时间大于dateB结束时间,不冲突 if (dateA1.compareTo(dateB2) >= 0) { return false; } //dateA结束时间小于dateB开始时间,不冲突 if (dateA2.compareTo(dateB1) <= 0) { return false; } } catch (ParseException e) { throw new MessageException("时间格式异常"); } return true; } /** * 计算一个日期N天后的时间 * @param date * @param n * @return * @throws ParseException */ public static String afterNDay(Date date,int n){ Calendar c=Calendar.getInstance(); SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); c.setTime(date); c.add(Calendar.DATE,n); Date d2=c.getTime(); String s=df.format(d2); return s; } /** * 计算两个日期相差了多少天 * @param date1 * @param date2 * @return */ public static int differentDaysByMillisecond(Date date1,Date date2) { int days = (int) ((date2.getTime() - date1.getTime()) / (1000*3600*24)); return days; } /** * 计算两个字符串日期(格式“yyyy-MM-dd”)相差了多少天 * @param date1 * @param date2 * @return */ public static int differentStrDaysByMillisecond(String date1,String date2) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date parse1 = null; Date parse2 = null; try { parse1 = sdf.parse(date1); parse2 = sdf.parse(date2); } catch (ParseException e) { e.printStackTrace(); } int days = (int) ((parse1.getTime() - parse2.getTime()) / (1000*3600*24)); return days; } /** * 获取本周周一 yyyy-MM-dd * @return */ public static String getWeekBegin(){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar cal = Calendar.getInstance(); //设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一 cal.setFirstDayOfWeek(Calendar.MONDAY); //获得当前日期是一个星期的第几天 int dayWeek = cal.get(Calendar.DAY_OF_WEEK); if(dayWeek==1){ dayWeek = 8; } // 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值 cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - dayWeek); Date mondayDate = cal.getTime(); String weekBegin = sdf.format(mondayDate); return weekBegin; } /** * 获取本周周一 yyyy-MM-dd * @return */ public static String getWeekEnd(){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar cal = Calendar.getInstance(); //设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一 cal.setFirstDayOfWeek(Calendar.MONDAY); //获得当前日期是一个星期的第几天 int dayWeek = cal.get(Calendar.DAY_OF_WEEK); if(dayWeek==1){ dayWeek = 8; } cal.add(Calendar.DATE, 4 +cal.getFirstDayOfWeek()); Date sundayDate = cal.getTime(); String weekEnd = sdf.format(sundayDate); return weekEnd; } }
4.调用工具类方法
public static void main(String[] args) { String date = "2023-07-12"; String yearHoliday = HolidayUtil.isWorkingDay(date); System.out.println(yearHoliday); }
打印结果:0
搞定收工
总结
到此这篇关于如何用JAVA判断当前时间是否为节假日、周末、工作日及调休日的文章就介绍到这了,更多相关JAVA判断当前时间为节假日内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!