`

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报表解决方案源码

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

    非常完美Java实现年、月、日、周访问量统计

    在Java编程语言中,实现对年、月、日、周访问量的统计是一项常见的任务,尤其是在网站数据分析或者服务器日志处理中。这个任务涉及到日期时间处理、数据存储以及可能的数据聚合操作。以下是一些关键的知识点,可以...

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

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

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

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

    javaReport java报表 java报表工具 java office 软件2

    用于开发JAVA报表,javaweb图形,及开发如office这样办公软件的最佳选着。。 并开放其源码。。。由于软件太大故分为两部分。。

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

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

    iReport(java报表开发工具使用教程)

    iReport是一款基于Java的开源报表开发工具,专为设计JasperReports报表而设计。它提供了一个用户友好的图形界面,使得非程序员也能轻松创建复杂的报表布局。本教程将深入介绍如何利用iReport来开发Java报表。 一、...

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

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

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

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

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

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

    java 水晶报表环境

    Java 水晶报表环境是Java开发者用于创建、设计和展示报表的重要工具。水晶报表(Crystal Reports)由SAP公司开发,它允许程序员利用丰富的数据源,如数据库、Excel表格等,来创建复杂的业务报告。在Java环境中集成...

    根据年月日计算周日期的小程序

    在这个小程序中,可能会使用到`java.time.LocalDate`来表示年月日,然后结合`java.time.temporal.ChronoUnit`来计算两个日期之间的周数差,从而得到输入日期所在的一周。 控制台是用户与程序交互的简单界面,通常在...

    java实现两个时间相差的年月日 (相差几年几天几日的结果)

    网上很多资源都没有输出结果是(相差几年几个月几天的代码)希望对大家有帮助 有不足地方 望大家多多指点

    JAVA+IREPORT实现报表功能

    本教程主要聚焦于使用JAVA和IREPORT来实现报表功能,包括PDF和EXCEL的生成。下面将详细介绍这两个技术及其结合使用的方法。 JAVA,全称Java编程语言,是一种广泛应用于服务器端开发的高级编程语言,具有跨平台、...

    水晶报表java web实现

    水晶报表在Java Web中的实现是将复杂的业务数据转化为可视化、易于理解的报表的过程。这个实现主要涉及了几个关键技术和组件,包括Crystal Reports、Java、JSP(Java Server Pages)以及Tomcat服务器。以下是对这些...

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

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

    ireport+jasperreport联合开发java报表(PDF).rar

    《ireport+jasperreport联合开发Java报表》是针对Java开发者的一款强大的报表生成工具,它能够帮助程序员高效地创建、设计和导出各种复杂的业务报表,尤其是PDF格式的报表。本资料详细介绍了如何利用ireport和...

    java根据当前日期+指定天数(月份...)得到相应日期,计算两日期之差

    这是我自己总结出来的 java根据当前日期+指定天数(月份...)得到相应日期以及计算两日期之差,希望对大家带来帮助

Global site tag (gtag.js) - Google Analytics