`

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中计算某个月工作日的相关知识点: ### Java中计算某个月的工作日总数及具体工作日 #### 概述 在Java中,要计算一个月内有多少个工作日(通常指周一至周五),以及...

    java水晶报表开发

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

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

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

    java报表开发

    java报表开发软件包

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

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

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

    "日期计算:两个日期间计算除去节假日非工作时间" 在 Java 语言中,计算两个日期之间的工作日时间是一个常见的需求,特别是在需要排除周末和法定节假日的情况下。本文将通过一个示例代码,详细介绍如何计算两个日期...

    Java 计算日期月差

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

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

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

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

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

    java报表API源代码(程序数据集、自定义函数和导出API)

    【Java报表API源代码解析】 Java报表API源代码主要涵盖了FineReport工具的程序数据集、自定义函数和导出API的实现,旨在帮助开发者深入了解报表工具的内部工作原理,掌握二次开发技能,以应对各种个性化的业务需求...

    JAVA报表生成工具

    Java报表生成工具是一种用于在企业级应用中创建、展示和管理数据报表的软件。这些工具通常提供丰富的图形和表格选项,以帮助用户更好地理解和解析大量数据。在这个特定的案例中,提到的工具似乎强调了其在3D饼图和...

    java 报表实现

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

    java水晶报表教程

    Java水晶报表教程主要聚焦于如何使用Crystal Reports 2008与JBuilder 2005在Java环境中创建和部署报表。 Crystal Reports是一款强大的报表设计工具,它允许开发者利用各种数据库资源来分析和呈现关键信息。这个教程...

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

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

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

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

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

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

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

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

Global site tag (gtag.js) - Google Analytics