java 每年定时维护工作日表

表数据

表结构ddl

-- CTCAUDITUSER.T_WORK_DAY_UTIL definition

CREATE TABLE "CTCAUDITUSER"."T_WORK_DAY_UTIL" 
   (	"EACH_DAY" DATE, 
	"IS_WORKDAY" VARCHAR2(2)
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "AUDIT_DATA" ;

COMMENT ON TABLE CTCAUDITUSER.T_WORK_DAY_UTIL IS '工作日表';

java 每年定时维护工作日表(需要免费注册天行API账号申请的api-key 天行数据TianAPI - 开发者API数据平台

public void insertWorkDay(String year){

        List<String> holidayList = new ArrayList<>();
        List<String> specialWorkdayList = new ArrayList<>();
        Map<String, Object> param = new HashMap<String, Object>() {{
            put("key", "需要申请");//这里key值是需要免费注册天行API账号申请的api-key 天行网站:https://www.tianapi.com/
            put("type", 1);
        }};

        int currentYear;
        if (StringUtils.isEmpty(year)) {
            currentYear = Calendar.getInstance().get(Calendar.YEAR);
        }else {
            currentYear = Integer.parseInt(year);
        }

        param.put("date", currentYear );
        String url = "http://api.tianapi.com/jiejiari/index";
        String response = HttpUtil.get(url, param);
        JSONObject resObj = JSONUtil.parseObj(response);
        int code = (int) resObj.get("code");
        if (code == 200) {
            JSONArray newslist = (JSONArray) resObj.get("newslist");
            for (Object listObj : newslist) {
                JSONObject obj = (JSONObject) listObj;
                String holidays = (String) obj.get("vacation");
                String[] holidayArray = holidays.split("\\|");
                holidayList.addAll(Arrays.asList(holidayArray));
                String remark = (String) obj.get("remark");
                if (org.apache.commons.lang3.StringUtils.isNotEmpty(remark)) {
                    String[] special = remark.split("\\|");
                    specialWorkdayList.addAll(Arrays.asList(special));
                }
            }
        }

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

        Calendar cal = Calendar.getInstance();
        cal.clear();
        cal.set(Calendar.YEAR, currentYear);
        Date startDate = cal.getTime();
        System.out.println(startDate);
        cal.clear();
        cal.set(Calendar.YEAR, currentYear);
        cal.roll(Calendar.DAY_OF_YEAR, -1);
        Date endDate = cal.getTime();
        System.out.println(endDate);

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(startDate);

        while (!calendar.getTime().after(endDate)) {
            Date currentDate = calendar.getTime();
            String format = dateFormat.format(currentDate);

            int weekday = calendar.get(Calendar.DAY_OF_WEEK); // 获取星期几信息
            String isWork = "0";
            // 判断是否为周六或周日或法定节假日
            if (weekday == Calendar.SATURDAY || weekday == Calendar.SUNDAY || holidayList.contains(format)) {
                isWork = "0";
            } else {
                isWork = "1";
            }
            // 周末补假
            if(specialWorkdayList.contains(format)){
                isWork = "1";
            }
            finalTaskHandlingMapper.insertWorkDayUtil(currentDate,isWork);
            calendar.add(Calendar.DAY_OF_MONTH, 1);
        }

    }

天行数据TianAPI - 开发者API数据平台注册成功后 申请api

查看申请api-key

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要实现每年存储工作日节假日,可以使用Java中的Calendar类和HolidayCalendar类。具体实现步骤如下: 1. 创建一个HolidayCalendar类,用于存储每年工作日节假日信息。 2. 在HolidayCalendar类中定义一个HashMap,用于存储每个日期对应的工作日、节假日信息。HashMap的key为日期,value为Holiday对象。 3. 在HolidayCalendar类中定义Holiday对象,包含日期、是否为工作日、是否为节假日等信息。 4. 使用Calendar类生成每年的日期,并将每个日期对应的工作日、节假日信息存储到HolidayCalendar中。 5. 可以通过HolidayCalendar类提供的方法,查询某个日期是否为工作日、节假日等信息。 示例代码如下: ```java import java.util.Calendar; import java.util.HashMap; public class HolidayCalendar { private HashMap<String, Holiday> calendar; public HolidayCalendar(int year) { calendar = new HashMap<>(); Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, 0); c.set(Calendar.DAY_OF_MONTH, 1); while (c.get(Calendar.YEAR) == year) { String date = String.format("%04d-%02d-%02d", c.get(Calendar.YEAR), c.get(Calendar.MONTH) + 1, c.get(Calendar.DAY_OF_MONTH)); boolean isWeekend = c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY; boolean isHoliday = /* 判断该日期是否为节假日 */; boolean isWorkday = /* 判断该日期是否为工作日 */; calendar.put(date, new Holiday(date, isWeekend, isHoliday, isWorkday)); c.add(Calendar.DAY_OF_MONTH, 1); } } public boolean isWorkday(String date) { Holiday h = calendar.get(date); return h == null ? false : h.isWorkday(); } public boolean isHoliday(String date) { Holiday h = calendar.get(date); return h == null ? false : h.isHoliday(); } public boolean isWeekend(String date) { Holiday h = calendar.get(date); return h == null ? false : h.isWeekend(); } private class Holiday { private String date; private boolean isWeekend; private boolean isHoliday; private boolean isWorkday; public Holiday(String date, boolean isWeekend, boolean isHoliday, boolean isWorkday) { this.date = date; this.isWeekend = isWeekend; this.isHoliday = isHoliday; this.isWorkday = isWorkday; } public boolean isWeekend() { return isWeekend; } public boolean isHoliday() { return isHoliday; } public boolean isWorkday() { return isWorkday; } } } ``` 调用示例: ```java HolidayCalendar calendar = new HolidayCalendar(2021); System.out.println(calendar.isWorkday("2021-01-01")); // false System.out.println(calendar.isHoliday("2021-01-01")); // true System.out.println(calendar.isWeekend("2021-01-02")); // true System.out.println(calendar.isWorkday("2021-01-04")); // true ``` 上述代码中,HolidayCalendar类中的构造函数会生成2021年的日期信息,并将每个日期对应的工作日、节假日信息存储到HashMap中;isWorkday()、isHoliday()、isWeekend()三个方法用于查询某个日期是否为工作日、节假日、周末。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值