java 判断当前日期是否是节假日

场景描述:以当前日期来判断是否节假日,如果是就把日期调整到工作日

getYearHoliday  这个方法是查询当前年度节假日有那些天(也可以查那些天串休 )

isWorkingDay  这个方法是把日期调整到工作日

 /**
     * @param currentYear 当前年度
     * @return 是否成功
     */
    public static Result<List<String>> getYearHoliday(Integer currentYear) {
        //节假日
        List<String> hoList = new ArrayList<>();
        //调休
        List<String> extraList = new ArrayList<>();
        //获取免费api地址
        String httpUrl = "https://timor.tech/api/holiday/year/" + currentYear;
        BufferedReader reader = null;
        // 用于存储返回的年份节假日数据
        StringBuffer sbf = new StringBuffer();
        try {
            // 创建url对象
            URL url = new URL(httpUrl);
            // 使用openConnection方法创建了一个URLConnection对象
            URLConnection connection = url.openConnection();
            // 设置请求头
            connection.setRequestProperty("User-Agent", "Mozilla/4.76");
            connection.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
            /**
             * 使用getInputStream方法获取输入流,这个输入流可以用来读取从URL地址返回的数据,
             * 可能是HTML内容、JSON数据或其他类型的信息。
             * 具体取决于URL地址所指向的资源类型。
             */
            InputStream is = connection.getInputStream();
            // BufferedReader创建字节流对象,InputStreamReader将字节流转换为字符流,编码为utf8
            reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));
            String strRead = null;
            while ((strRead = reader.readLine()) != null) {
                // 将每行内容追加到sbf字符串变量中
                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 Result.error(ResultCode.ERROR.getCode(), "该年份未分配日期安排!----->>holiday为空", null);
            }
            for (Map.Entry<String, Object> entry : holiday.entrySet()) {
                // 读取字符的值,并转换成字符串
                String value = entry.getValue().toString();
                // 将字符串改为json格式
                JSONObject jsonObject = JSONObject.parseObject(value);
                // 获取是否为假日(是为true,不是为false)
                String hoBool = jsonObject.getString("holiday");
                // 获取时间
                String extra = jsonObject.getString("date");
                //判断不是假期后调休的班
                if ("true".equals(hoBool)) {
                    hoList.add(extra);
                } else {
                    extraList.add(extra);
                }
            }
        } catch (Exception e) {
            return Result.error(ResultCode.ERROR.getCode(), "getYearHoliday方法错误----->>getYearHoliday", null);
        }
        return Result.success(hoList);
    }
  /**
     * 判断是否为节假日
     *
     * @param date 日期时间
     * @return
     */
    public static LocalDate isWorkingDay(LocalDate date) {
        Integer currentYear = date.getYear();
        Result<List<String>> result = getYearHoliday(currentYear);
        if (result.getCode()==SUCCESS){
            List<String> yearHoliday = result.getData();
            Collections.sort(yearHoliday);
            for (String holiday : yearHoliday) {
                if(holiday.equals(date.toString())){
                    // 当前日期加一天
                    date = date.plusDays(1);
                }
            }
        }else {
            return null;
        }
        return date;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
判断当前日期是否是节假日、双休日,可以使用Java 8中的java.time包中的类和方法。具体可以按照以下步骤进行操作: 1. 首先,需要创建一个LocalDate对象表示当前日期,可以使用now()方法获取当前日期: ```java LocalDate today = LocalDate.now(); ``` 2. 判断当前日期是否是节假日,可以使用第三方API或者自己实现一个判断方法。这里以自己实现为例,假设节假日包括元旦节、春节、清明节、劳动节、端午节、中秋节、国庆节。可以定义一个方法,判断当前日期是否在这些节假日之一: ```java public static boolean isHoliday(LocalDate date) { int month = date.getMonthValue(); int day = date.getDayOfMonth(); if ((month == 1 && day == 1) || // 元旦节 (month == 2 && day >= 4 && day <= 10) || // 春节 (month == 4 && day >= 4 && day <= 6) || // 清明节 (month == 5 && day >= 1 && day <= 3) || // 劳动节 (month == 6 && day >= 12 && day <= 14) || // 端午节 (month == 9 && day >= 19 && day <= 21) || // 中秋节 (month == 10 && day >= 1 && day <= 7)) { // 国庆节 return true; } return false; } ``` 3. 判断当前日期是否是双休日,可以使用DayOfWeek枚举类的值来判断。如果当前日期是星期六或星期日,则认为是双休日。可以使用getDayOfWeek()方法获取当前日期的星期几: ```java public static boolean isWeekend(LocalDate date) { DayOfWeek dayOfWeek = date.getDayOfWeek(); return dayOfWeek == DayOfWeek.SATURDAY || dayOfWeek == DayOfWeek.SUNDAY; } ``` 4. 最后,可以通过调用上面定义的方法来判断当前日期是否是节假日、双休日: ```java if (isHoliday(today)) { System.out.println("今天是节假日!"); } else if (isWeekend(today)) { System.out.println("今天是双休日!"); } else { System.out.println("今天是工作日!"); } ``` 需要注意的是,判断节假日需要根据具体情况调整,例如春节日期会根据农历而有所不同。同时,如果需要判断其他国家或地区的节假日,也需要根据当地情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值