`

JAVA报表两日期间月,周,日计算

阅读更多
//计算天数
    public List day(String dates, String datee) throws ParseException {
        List dayls = new ArrayList();
        // 字符串转换成日期
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date startDate = format.parse(dates);
        Calendar startTime = Calendar.getInstance();
        startTime.clear();
        startTime.setTime(startDate);
        int startYear = startTime.get(Calendar.YEAR);
        int startMonth = startTime.get(Calendar.MONTH);
        int startDay = startTime.get(Calendar.DAY_OF_MONTH);
        Date endDate = format.parse(datee);
        Calendar endTime = Calendar.getInstance();
        endTime.clear();
        endTime.setTime(endDate);
        int endYear = endTime.get(Calendar.YEAR);
        int endMonth = endTime.get(Calendar.MONTH);
        int endDay = endTime.get(Calendar.DAY_OF_MONTH);
        int count = 0;
        for (int x = startYear; x <= endYear; x++) {
            // 罗马历法产生年份公元1582年
            int gregorianCutoverYear = 1582;
            // 判断是否是闰年
            boolean isLeapYear = x >= gregorianCutoverYear ? ((x % 4 == 0) && ((x % 100 != 0) || (x % 400 == 0)))
                    : (x % 4 == 0);
            // 获取开始月的最大天数;大月是1,3,5,7,8,10,12;小月是4,6,9,11;特殊月是2
            int max = 0;
            if (startMonth == 1) {
                if (isLeapYear) {
                    max = 29;
                }
                if (!isLeapYear) {
                    max = 28;
                }
            }
            if (startMonth == 3 || startMonth == 5 || startMonth == 8
                    || startMonth == 10) {
                max = 30;
            }
            if (startMonth == 0 || startMonth == 2 || startMonth == 4
                    || startMonth == 6 || startMonth == 7 || startMonth == 9
                    || startMonth == 11) {
                max = 31;
            }
            // 循环每个月
            // 如果在日期范围内月份循环时自增到了一年的最后一个月就将月份初始化到一月份
            int y = 0;
            // 如果是开始日期的第一个年的月数就从开始月数循环
            if (x == startYear) {
                y = startMonth;
            }
            for (; y < 12; y++) {
                // 获取当月的最大天数;大月是1,3,5,7,8,10,12;小月是4,6,9,11;特殊月是2
                max = 0;
                if (y == 1) {
                    if (isLeapYear) {
                        max = 29;
                    }
                    if (!isLeapYear) {
                        max = 28;
                    }
                }
                if (y == 3 || y == 5 || y == 8 || y == 10) {
                    max = 30;
                }
                if (y == 0 || y == 2 || y == 4 || y == 6 || y == 7 || y == 9
                        || y == 11) {
                    max = 31;
                }
                int ty = y + 1;
                // 循环每一天
                int z = 1;
                // 如果是开始日期的第一个月的天数就从开始天数循环
                if (x == startYear && y == startMonth) {
                    z = startDay;
                }
                for (; z <= max; z++) {
                    count++;
                    dayls.add(x + "-" + ty + "-" + z);
                    if (x == endYear && y == endMonth && z == endDay) {
                        break;
                    }
                }
                // 如果已经遍历过了截至日期的最后月份就中止月份的循环
                if (x == endYear && y == endMonth) {
                    break;
                }
            }
        }
        return dayls;
    }
    //计算月数
    public static List month(String dates, String datee) throws ParseException {
        List dayls = new ArrayList();
        // 字符串转换成日期
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date startDate = format.parse(dates);
        Calendar startTime = Calendar.getInstance();
        startTime.clear();
        startTime.setTime(startDate);
        int startYear = startTime.get(Calendar.YEAR);
        int startMonth = startTime.get(Calendar.MONTH);
        int startDay = startTime.get(Calendar.DAY_OF_MONTH);
        Date endDate = format.parse(datee);
        Calendar endTime = Calendar.getInstance();
        endTime.clear();
        endTime.setTime(endDate);
        int endYear = endTime.get(Calendar.YEAR);
        int endMonth = endTime.get(Calendar.MONTH);
        int endDay = endTime.get(Calendar.DAY_OF_MONTH);
//  if(startDay!=1){
//   startTime.add(Calendar.DAY_OF_MONTH, -startDay);
//  }
        int count = 0;
        for (int x = startYear; x <= endYear; x++) {
            // 罗马历法产生年份公元1582年
            int gregorianCutoverYear = 1582;
            // 判断是否是闰年
            boolean isLeapYear = x >= gregorianCutoverYear ? ((x % 4 == 0) && ((x % 100 != 0) || (x % 400 == 0)))
                    : (x % 4 == 0);
            // 获取开始月的最大天数;大月是1,3,5,7,8,10,12;小月是4,6,9,11;特殊月是2
            int max = 0;
            if (startMonth == 1) {
                if (isLeapYear) {
                    max = 29;
                }
                if (!isLeapYear) {
                    max = 28;
                }
            }
            if (startMonth == 3 || startMonth == 5 || startMonth == 8
                    || startMonth == 10) {
                max = 30;
            }
            if (startMonth == 0 || startMonth == 2 || startMonth == 4
                    || startMonth == 6 || startMonth == 7 || startMonth == 9
                    || startMonth == 11) {
                max = 31;
            }
            // 循环每个月
            // 如果在日期范围内月份循环时自增到了一年的最后一个月就将月份初始化到一月份
            int y = 0;
            // 如果是开始日期的第一个年的月数就从开始月数循环
            if (x == startYear) {
                y = startMonth;
            }
            for (; y < 12; y++) {
                // 获取当月的最大天数;大月是1,3,5,7,8,10,12;小月是4,6,9,11;特殊月是2
                max = 0;
                if (y == 1) {
                    if (isLeapYear) {
                        max = 29;
                    }
                    if (!isLeapYear) {
                        max = 28;
                    }
                }
                if (y == 3 || y == 5 || y == 8 || y == 10) {
                    max = 30;
                }
                if (y == 0 || y == 2 || y == 4 || y == 6 || y == 7 || y == 9
                        || y == 11) {
                    max = 31;
                }
                int ty = y + 1;
                // 循环每一天
                int z = 1;
                for (; z <= max; z++) {
                    count++;
                    if (z == max || z == 1) {
                        dayls.add(x + "-" + ty + "-" + z);
                    }
                    if (x == endYear && y == endMonth + 1) {
                        break;
                    }
                }
                // 如果已经遍历过了截至日期的最后月份就中止月份的循环
                if (x == endYear && y == endMonth) {
                    break;
                }
            }
        }
        return dayls;
    }
    //计算周数
    public List week(String dates, String datee) throws Exception {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date startDate = format.parse(dates);
        Date endDate = format.parse(datee);
        ArrayList ls = new ArrayList();
        Calendar beginCalendar = Calendar.getInstance();
        beginCalendar.setTime(startDate);
        Calendar endCalendar = Calendar.getInstance();
        endCalendar.setTime(endDate);
        int sday = beginCalendar.get(Calendar.DAY_OF_WEEK) - 1;
        int eday = endCalendar.get(Calendar.DAY_OF_WEEK) - 1;
        if (sday != 0) {
            beginCalendar.add(Calendar.DAY_OF_WEEK, -sday);
        }
        if (eday != 0) {
            endCalendar.add(Calendar.DAY_OF_WEEK, eday + 7);
        } else {
            endCalendar.add(Calendar.DAY_OF_WEEK, eday + 1);
        }
        while (beginCalendar.before(endCalendar)) {
            if (beginCalendar.get(Calendar.DAY_OF_WEEK) - 1 == 0) {
                ls.add(format.format(beginCalendar.getTime()));
            }
            beginCalendar.add(Calendar.DAY_OF_YEAR, 1);
        }
        return ls;
    }
 
分享到:
评论

相关推荐

    java报表工具java报表工具java报表工具

    java报表工具java报表工具java报表工具java报表工具java报表工具java报表工具java报表工具java报表工具java报表工具java报表工具java报表工具java报表工具java报表工具java报表工具java报表工具java报表工具java报表...

    Java 工作日计算

    本类依赖commons-lang包 java日期计算简单实用方法如下: SimpleDateFormat format = new ...//计算两个日期之间的工作日总数 int count = workdayUtils.getWorkdayCount(new Date(), format.parse("2013-08-13"));

    JAVA报表解决方案源码

    Java报表解决方案源码是针对企业级应用中数据报表生成与展示的一个重要工具,它通常包含一系列的类库、API和示例代码,帮助开发者在Java平台上实现复杂的数据处理和报表设计。在J2EE环境中,这类解决方案对于数据...

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

    根据提供的文件信息,我们可以总结出以下关于Java中计算某个月工作日的相关知识点: ### Java中计算某个月的工作日总数及具体工作日 #### 概述 在Java中,要计算一个月内有多少个工作日(通常指周一至周五),以及...

    Java 计算两个日期之间相差的月数

    在Java编程语言中,计算两个日期之间相差的月数是一个常见的任务,这通常涉及到日期处理和时间计算。本文将深入探讨如何使用Java实现这个功能,包括标准库中的API以及一些高级方法。 首先,Java 8引入了`java.time`...

    java水晶报表开发

    Java水晶报表开发是一种在Java应用中创建、设计和展示复杂报表的重要技术。水晶报表(Crystal Reports)是由SAP公司开发的一款强大的报表工具,它能够帮助开发者整合数据源,设计美观的报表,并支持导出多种格式,如...

    java报表开发

    java报表开发软件包

    金蝶K3星空云获取报表查询 WEB API(成本计算单报表查询) JAVA版.rar

    4. 本例包括接口请求,和数据返回后的报表数据解析部分,即成本计算单报表的解析部分。 5. 本例不包括数据存储部分,即解析出来的数据存储数据库这部分不包含。 6. 本例基于JAVA SDK 7.6..1 即:k3cloud-webapi-sdk....

    Java报表的生成 Java报表的生成 Java报表的生成

    这个工程可以跑起来,里面涵盖了所需要的jar包,报表的现实方式有两种,一种是以图片形式输出在本地,一种是输出到界面,是我用了几天时间实现的,有问题联系我QQ673707678

    Java 计算日期月差

    计算两日期之间的差,看看两日期之间能差几个月的问题

    java 周算法 通过日期得到周信息

    它通过设置`GregorianCalendar`的时间为该年份的最后一天(12月31日23:59:59),然后调用`getWeekOfYear`方法来获取这一年的总周数。 #### 5. 获取某年某周的第一天 ```java public static Date getFirstDayOfWeek...

    快逸报表软件-免费、快速开发WEB报表的JAVA报表工具

    快逸报表是面向软件开发人员的、高性价比、易学易用的JAVA报表工具软件。快逸报表提供了高效的报表设计方案、强大的报表展现能力、灵活的部署机制,并且具备强有力的填报功能,为中小规模用户的数据统计分析、展现...

    java 报表实现

    在Java开发中,报表生成是一项常见的任务,尤其在企业级应用中,用于数据展示和分析。本主题将围绕"java 报表实现"展开,主要关注如何使用Java技术和相关库来设计和生成报表,以及涉及的`jsp控制器`和`service层`的...

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

    在Java编程中,计算工作日是一项常见的需求,特别是在金融、物流和项目管理等领域。这个话题主要涉及如何在Java中处理日期和时间,并考虑到法定节假日的影响。以下是对这一主题的详细阐述: 1. **日期和时间处理库*...

    java开发水晶报表所有类包及导出PDF实例

    Java开发中的水晶报表(Crystal Reports)是一款强大的报告生成工具,常用于企业级应用,能够帮助开发者设计复杂的报表并导出为多种格式,如PDF、Excel等。本实例将重点讲解如何在Java环境中集成和使用水晶报表,...

    java编程计算有效工作时间的方法.java

    java编程计算有效工作时间的方法.java

    JAVA计算某年、某月、某日和某年、某月、某日之间的天数间隔。

    计算某年、某月、某日和某年、某月、某日之间的天数间隔。要求年、月、日通过main方法的参数传递到程序中。

    计算两日期的时间差

    计算两日期之间的时间差,输入两个年月日 计算相差天数

    锐浪Grid++Report报表web(Java)版使用手册

    锐浪Grid++Report报表Web(Java)版使用手册。 非常详细。 内容列表: 1.报表设计器安装文件 2.报表设计器的使用 3.报表页面和JS文件及使用手册 4.报表后台代码的文件及使用手册(整合Struts) (附加.html,.js,.java,....

Global site tag (gtag.js) - Google Analytics