`
高级java工程师
  • 浏览: 409178 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java实现两个时间点的工作日

阅读更多

代码
public static void main(String[] args) {
        try {
            System.out.println(check(string2Date("2010-4-29"),string2Date("2011-6-4")));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static int check(Date beginDate, Date endDate) throws Exception {

        Calendar cal = Calendar.getInstance();
        cal.setTime(beginDate);
        Integer beginYear = cal.get(Calendar.YEAR);

        cal.setTime(endDate);
        Integer endYear = cal.get(Calendar.YEAR);
        if (beginYear == endYear) {
            return betweenDaysInSameYear(beginDate, endDate);
        } else {
            int sumDays = 0;
            for (Integer i = beginYear; i <= endYear; i++) {
                if (i == beginYear) {
                    sumDays += betweenDaysInSameYear(beginDate, string2Date(i.toString()+ "-12-31"));
                } else if (i == endYear) {
                    sumDays += betweenDaysInSameYear(string2Date(i.toString()+ "-1-1"), endDate);
                } else {
                    sumDays += betweenDaysInSameYear(string2Date(i.toString()+ "-1-1"), string2Date(i.toString() + "-12-31"));
                }
            }
            return sumDays;
        }
    }

    public static int betweenDaysInSameYear(Date beginDate, Date endDate) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(beginDate);
        int beginWeek = cal.get(Calendar.WEEK_OF_YEAR);
        int beginDay = cal.get(Calendar.DAY_OF_WEEK);

        cal.setTime(endDate);
        int endWeek = cal.get(Calendar.WEEK_OF_YEAR);
        int endDay = cal.get(Calendar.DAY_OF_WEEK);

        int beginDays = 0;
        int endDays = 0;
        switch (beginDay) {
        case Calendar.SATURDAY:
            beginDays = 0;
            break;
        case Calendar.SUNDAY:
            beginDays = 0;
            break;
        default:
            beginDays = Calendar.FRIDAY - beginDay + 1;
            break;
        }
        switch (endDay) {
        case Calendar.SATURDAY:
            endDays = 5;
            break;
        case Calendar.SUNDAY:
            endDays = 5;
            break;
        default:
            endDays = endDay - 1;
            break;
        }
        return beginDays+ ((endWeek - beginWeek - 2) * 5 < 0 ? 0 : ((endWeek- beginWeek - 2) * 5)) + endDays;
    }

    public static Date string2Date(String dateStr) throws Exception {
        SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
        return fmt.parse(dateStr);
    }

分享到:
评论

相关推荐

    JAVA时间工具类(计算法定工作日工时等)

    JAVA时间工具类(计算法定工作日工时):计算某个日期加上几个工作日后的一个工作日期(除周末和法定节假日),计算某个日期后一天的工作日期(除周末和法定节假日),计算两个日期的真实工作日(除周末和法定节假日),...

    Java 实现判断今天是工作日、假日、节假日.zip

    Java 实现判断今天是工作日、假日、节假日。 其中有两个方法,一个方法是: /** * 获取今天日期值 */ public Date getCurrentDate() { return Calendar.getInstance().getTime(); } 另一个方法是: /** * ...

    java中计算某个月的工作日总共几天

    在Java中,要计算一个月内有多少个工作日(通常指周一至周五),以及具体哪些日子是工作日,可以通过多种方法实现。这里将介绍一种较为通用的方法:利用`java.util.Calendar`类来计算指定月份内的工作日。 #### 一...

    两个日期间计算 除去节假日 非工作时间

    计算两个日期之间的工作日时间需要排除周末和法定节假日,可以使用 Java 的 `Calendar` 类和日期操作来实现该功能。通过示例代码,我们可以了解如何计算工作日时间,排除周末和法定节假日,并且格式化计算结果。

    Java 工作日计算

    //计算15个工作日之后的工作日日期 Date date = workdayUtils.getWorkday(new Date(), 15); //计算两个日期之间的工作日总数 int count = workdayUtils.getWorkdayCount(new Date(), format.parse("2013-08-13"));

    使用Java的Calendar类计算两段时间之间的工作日的天/小时/分钟/秒数

    该工具类用于两个时间段之间节假日的计算(可获取两个时间段之间的节假日天数,小时,分钟,秒)

    java 工具类 获取俩个时间之间相差分钟数 排除周六周日 节假日 精确到分钟数/秒

    网上排除节假日、周六周日 获取相差时间 分为四种情况, 精确到天 此工具类在此基础之上进行优化, 分为俩种情况, 精确到分钟,保留俩位小数 (精确到秒 需自己加工下) 入口方法: getWorkHours

    java得到下一个法定工作日期

    如果下一个日期是周末(周六或周日),那么我们就需要继续检查下下一个日期,直到找到第一个工作日。同时,如果存在特定的节假日,我们需要额外考虑这些日期,确保它们不被视为工作日。 以下是一个简单的示例代码...

    计算两个工作日之间的工作日

    在IT领域,尤其是在数据分析、项目管理和时间管理等工作中,计算两个工作日之间的实际工作日是一项常见的任务。这有助于准确地规划进度、设定截止日期以及进行工作效率分析。以下将详细介绍标题和描述中提到的三种...

    java工作日计算(去除法定假日)

    通过以上步骤,我们可以构建一个功能完善的工作日计算系统,能够精确地计算出两个日期之间的工作日数量,同时考虑到了法定节假日的影响。这个过程涉及了文件读取、日期时间处理和自定义逻辑的实现,是Java开发中的一...

    java 请假天数计算工具类

    使用Java 8的日期时间API(`java.time`包)来处理日期和时间,如计算两个日期之间的天数,判断是否为工作日等。同时,为了提高效率和减少数据库交互,可以利用Redis的特性,将部分计算结果缓存起来。 综上所述,这...

    java处理日期合并

    本文详细介绍了如何使用Java处理日期合并的问题,通过对`TimeoffDateDTO`类的定义和日期合并算法的具体实现,提供了一种有效的方法来解决实际工作中经常遇到的时间段重叠问题。这种方法不仅适用于员工请假时间的管理...

    Java节假日算法(免费)

    此外,我们还可以看到这个算法的实现过程中使用了多种 Java 技术,例如使用 Calendar 和 Date 类来处理日期和时间,使用 List 和 Vacation 类来存储和处理假期数据,使用循环和条件语句来实现算法的逻辑。...

    2023年日历(标记工作日,节假日,调休,周末),计算两个日期相差的工作日天数

    压缩包里有2个文件,用于计算两个日期相差的工作日天数(排除周末和法定节假日): 1、excel表为2023年日历数据,并且备注工作日、周末,调休、节假日类型,可导入数据库。 2、SQL文件为2023年所有日期的插入SQL,并...

    判断是否是节假日以及几个工作日后的日期(包含json格式依赖jar包)

    在Java编程中,有时我们需要处理与日期相关的任务,例如判断某个日期是否是节假日,或者计算几个工作日后的新日期。这个工具类就是为了解决这样的问题而设计的。它包含了一个功能丰富的API,允许开发者轻松地进行...

    java8时间api

    7. **TemporalAdjusters**: `TemporalAdjusters` 是一组工厂方法,用于创建时间调整器,可以对日期或时间进行各种修改,如下一个月、下一个工作日等。 8. **ZoneId**: `ZoneId` 用于表示时区,比如 "Asia/Shanghai...

    java实现的日期操作类

    `java.time`包还提供了丰富的日期和时间计算功能,例如`minusDays()`用于减少日期,`plusWeeks()`和`minusWeeks()`用于添加或减少周数,`with(TemporalAdjuster)`可以进行复杂的日期调整,如下一个工作日等。...

    java时间日历

    6. **Duration** 和 **Period**: 分别用于表示两个时间点之间的时间间隔(秒和纳秒)和日期间隔(年、月、日)。 在实际编程中,这些类通常会配合使用,例如在日历应用中,你可能需要创建一个新的日期对象,添加或...

    excel计算计算两个日期之间的工作日

    excel计算两个日期之间的工作日,周一至周五为工作日。

Global site tag (gtag.js) - Google Analytics