0
点赞
收藏
分享

微信扫一扫

Java日期计算总结(包含工作日排除节假日)

_鱼与渔_ 2022-04-14 阅读 48
java

#博学谷IT学习技术支持#

文章目录


Java日期计算方法

提示:以下是本篇文章正文内容,下面案例可供参考

1.参数的日期加指定的年、月、日

代码如下(示例):

    /**
     * @Description 参数的日期加指定的年
     * @param date 日期
     * @param year 加算的年
     * @return 加算后的日期
     */
    public static Date addYear(Date date, int year) {
        if (date == null) {
            return null;
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.YEAR, year);
        return calendar.getTime();
    }

 	 /**
     * @Description 参数的日期加指定的月
     * @param date 日期
     * @return 指定的月
     * @return 加算后的日期
     */
    public static Date addMonth(Date date, int month) {
        if (date == null) {
            return null;
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH, month);
        return calendar.getTime();
    }

    /**
     * @Description 参数的日期加指定的日
     * @param date 日期
     * @return 指定的日
     * @return 加算后的日期
     */
    public static Date addDay(Date date, int day) {
        if (date == null) {
            return null;
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.DATE, day);
        return calendar.getTime();
    }

2.参数的日期加指定的时、分、秒

代码如下(示例):

    /**
     * @Description 参数的日期加指定的时
     * @param date 日期
     * @param hour 加算的时
     * @return 加算后的日期
     */
    public static Date addHour(Date date, int hour) {
        if (date == null) {
            return null;
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.HOUR_OF_DAY, hour);
        return calendar.getTime();
    }

    /**
     * @Description 参数的日期加指定的分
     * @param date 日期
     * @param min  加算的分
     * @return 加算后的日期
     */
    public static Date addMinute(Date date, int min) {
        if (date == null) {
            return null;
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MINUTE, min);
        return calendar.getTime();
    }

    /**
     * @Description 参数的日期加指定的分
     * @param date   日期
     * @param second 加算的秒
     * @return 加算后的日期
     */
    public static Date addSecond(Date date, int second) {
        if (date == null) {
            return null;
        }
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.SECOND, second);
        return calendar.getTime();
    }

3.从日期FROM到日期TO的天数

代码如下(示例):

 	/**
     * @Description 从日期FROM到日期TO的天数
     * @param dateStrFrom 日期FROM("yyyy-MM-dd")
     * @param dateStrTo   日期TO("yyyy-MM-dd")
     * @return int 天数
     */
    public static int getDaysIn2Day(String dateStrFrom, String dateStrTo) {
        if (StringUtils.isEmpty(dateStrFrom) || StringUtils.isEmpty(dateStrTo)) {
            return 0;
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar fromCalendar = Calendar.getInstance();
        Calendar toCalendar = Calendar.getInstance();
        try {
            fromCalendar.setTime(sdf.parse(dateStrFrom.trim()));
            toCalendar.setTime(sdf.parse(dateStrTo.trim()));
        } catch (ParseException ex) {
            throw new RuntimeException(ex);
        }
        long day = (toCalendar.getTime().getTime() - fromCalendar.getTime().getTime()) / (24 * 60 * 60 * 1000);
        return ConvUtils.convToInt(day);
    }

4.参数的日期加指定的工作日

    /**
     * @Description 参数的日期加指定的工作日(不排除节假日)
     * @param startDate 开始日期
     * @param workDay 工作日天数(周一到周五)
     * @return 加算后的日期
     */
    public static String getWorkDay(Date startDate, int workDay) {
        Calendar c1 = Calendar.getInstance();
        c1.setTime(startDate);
        for (int i = 0; i < workDay; i++) {
            c1.set(Calendar.DATE, c1.get(Calendar.DATE) - 1);
            if (Calendar.SATURDAY == c1.get(Calendar.SATURDAY) || Calendar.SUNDAY == c1.get(Calendar.SUNDAY)) {
                workDay = workDay + 1;
                c1.set(Calendar.DATE, c1.get(Calendar.DATE) - 1);
                continue;
            }
        }
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        c1.set(Calendar.DATE, c1.get(Calendar.DATE) +1);
        return df.format(c1.getTime());
    }

  	/**
     * @Description 参数的日期加指定的工作日(排除节假日)
     * @param startDate 开始日期
     * @param timeout 加的工作日(节假日不算)
     * @return 加算后的日期
     */
    public static Map<String, Object> getWorkDays(Date nowTime, int timeout) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(nowTime);
        int year = calendar.get(Calendar.YEAR);
        String s = HttpsUtils.sendSSLRequest("http://timor.tech/api/holiday/year/" + year, Maps.newHashMap(), HttpsUtils.Method_GET);
        Map map = JsonUtils.deserialize(s, Map.class);
        Map holiday = (Map) map.get("holiday");
        int timeouts = 0;
        String lastTime ="";
        String week = "";
        for (int i = 1; i <= timeout; i++) {
            SimpleDateFormat sdf = new SimpleDateFormat("MM-dd");
            lastTime = sdf.format(addDay(nowTime, i));
            if (holiday.get(lastTime) != null) {
                Map ts = (Map) holiday.get(lastTime);
                if (ConvUtils.convToBool(ts.get("holiday"))) {
                    timeouts++;
                    timeout++;
                };
            } else {
                //判断是否为周六周日
                week = getWeek(addDay(nowTime, i));
                if (week.equals("星期六") || week.equals("星期日")) {
                    timeouts++;
                    timeout++;
                }
            };
        }
        Map<String, Object> maps = Maps.newHashMap();
        //工作日后实际日期:
        maps.put("lastTime",lastTime);
        //实际天数
        maps.put("timeout",timeout);
        //节假日天数
        maps.put("timeouts",timeouts);
        return maps;
    }

 	/**
     * @Description 根据日期获取得文字 星期几
     * @param startDate date
     * @return 例子:星期一
     */
    public static String getWeek(Date date){
        String[] weeks = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        int week_index = cal.get(Calendar.DAY_OF_WEEK) - 1;
        if(week_index<0){
            week_index = 0;
        }
        return weeks[week_index];
    }

    public static void main(String[] args) {
        System.out.println(getWorkDays(new Date(),7));;
    }

查询国家法定节假日接口

接口查询参数:
在这里插入图片描述

总结

以上简单的总结了几种Java中常用的日期计算,希望能对于大家有所帮助,谢谢!

举报

相关推荐

0 条评论