Java获取某月节假日+周末

感觉大佬提供的免费节假日接口
http://timor.tech/api/holiday
该工具类能获取到 严格按照国家要求的双休和法定节假日并且筛掉节假日的补班。

import com.alibaba.fastjson.JSONObject;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import org.springframework.util.CollectionUtils;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;


	//获取周末和节假日
    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;
    }

//获取节假日不含周末
    private static Map getJjr(int year, int month) {
        String url = "http://timor.tech/api/holiday/year/"+year+"-"+month;
        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开始
    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;
    }

maven

 		<!-- okhttp -->
        <dependency>
            <groupId>com.squareup.okhttp</groupId>
            <artifactId>okhttp</artifactId>
            <version>2.5.0</version>
        </dependency>
        <!--fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
判断日期是否是周末很简单,可以使用Java中的Calendar类的get方法获取日期对应的星期几,然后判断是否是周六或周日即可。代码如下: ``` Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); if (dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY) { // 是周末 } ``` 判断日期是否是节假日比较复杂,需要获取节假日列表并进行匹配。可以使用第三方的节假日API来实现,或者自己编写代码实现。以下是自己编写代码实现的思路: 1. 获取节假日列表,可以存储在文件中或者数据库中。 2. 根据日期获取对应的年份,然后查询该年份的节假日列表。 3. 判断日期是否在节假日列表中,如果在则说明是节假日。 代码如下: ``` // 读取节假日列表,这里以读取文件为例 List<Date> holidayList = new ArrayList<>(); try { BufferedReader reader = new BufferedReader(new FileReader("holiday.txt")); String line; while ((line = reader.readLine()) != null) { holidayList.add(new SimpleDateFormat("yyyy-MM-dd").parse(line)); } reader.close(); } catch (IOException | ParseException e) { e.printStackTrace(); } // 判断日期是否是节假日 Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int year = calendar.get(Calendar.YEAR); for (Date holiday : holidayList) { Calendar c = Calendar.getInstance(); c.setTime(holiday); if (c.get(Calendar.YEAR) == year && c.get(Calendar.MONTH) == calendar.get(Calendar.MONTH) && c.get(Calendar.DAY_OF_MONTH) == calendar.get(Calendar.DAY_OF_MONTH)) { // 是节假日 break; } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值