//计算天数
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;
}
分享到:
相关推荐
本类依赖commons-lang包 java日期计算简单实用方法如下: SimpleDateFormat format = new ...//计算两个日期之间的工作日总数 int count = workdayUtils.getWorkdayCount(new Date(), format.parse("2013-08-13"));
Java报表解决方案源码是针对企业级应用中数据报表生成与展示的一个重要工具,它通常包含一系列的类库、API和示例代码,帮助开发者在Java平台上实现复杂的数据处理和报表设计。在J2EE环境中,这类解决方案对于数据...
根据提供的文件信息,我们可以总结出以下关于Java中计算某个月工作日的相关知识点: ### Java中计算某个月的工作日总数及具体工作日 #### 概述 在Java中,要计算一个月内有多少个工作日(通常指周一至周五),以及...
JAVA时间工具类(计算法定工作日工时):计算某个日期加上几个工作日后的一个工作日期(除周末和法定节假日),计算某个日期后一天的工作日期(除周末和法定节假日),计算两个日期的真实工作日(除周末和法定节假日),...
在Java编程语言中,计算两个日期之间相差的月数是一个常见的任务,这通常涉及到日期处理和时间计算。本文将深入探讨如何使用Java实现这个功能,包括标准库中的API以及一些高级方法。 首先,Java 8引入了`java.time`...
使用Java 8的日期时间API(`java.time`包)来处理日期和时间,如计算两个日期之间的天数,判断是否为工作日等。同时,为了提高效率和减少数据库交互,可以利用Redis的特性,将部分计算结果缓存起来。 综上所述,这...
它通过设置`GregorianCalendar`的时间为该年份的最后一天(12月31日23:59:59),然后调用`getWeekOfYear`方法来获取这一年的总周数。 #### 5. 获取某年某周的第一天 ```java public static Date getFirstDayOfWeek...
iReport是一款基于Java的开源报表开发工具,专为设计JasperReports报表而设计。它提供了一个用户友好的图形界面,使得非程序员也能轻松创建复杂的报表布局。本教程将深入介绍如何利用iReport来开发Java报表。 一、...
【Java报表API源代码解析】 Java报表API源代码主要涵盖了FineReport工具的程序数据集、自定义函数和导出API的实现,旨在帮助开发者深入了解报表工具的内部工作原理,掌握二次开发技能,以应对各种个性化的业务需求...
Java Swing 实现的考勤工时计算工具是一个基于桌面应用的程序,专为处理和计算员工的出勤时间而设计。这个工具的核心功能是接收Excel报表中的考勤数据,然后利用SQLite数据库进行存储和处理,以得出精确的工作小时...
在对环境的支持上,润乾报表采用纯Java编写,能够在任何支持JDK的操作系统上运行,兼容各种J2EE应用服务器和具有JDBC接口的数据库。前端展现遵循标准HTML,确保在IE和Netscape等浏览器上的良好兼容性。对于.NET web...
【Java报表】是一种在Java应用程序中用于数据展示和分析的重要技术。它允许开发者将数据库中的数据转换成易于理解和分析的格式,如表格、图表、图形等。Java报表系统通常包括数据查询、数据处理、样式设计、导出等...
Java开发中的水晶报表(Crystal Reports)是一款强大的报告生成工具,常用于企业级应用,能够帮助开发者设计复杂的报表并导出为多种格式,如PDF、Excel等。本实例将重点讲解如何在Java环境中集成和使用水晶报表,...
在Java编程中,计算工作日是一项常见的需求,特别是在金融、物流和项目管理等领域。这个话题主要涉及如何在Java中处理日期和时间,并考虑到法定节假日的影响。以下是对这一主题的详细阐述: 1. **日期和时间处理库*...
Java计算两个经纬度点之间距离(以米为单位)算法, 纯Java代码, 可供参考。 在具体项目中使用过。
网上排除节假日、周六周日 获取相差时间 分为四种情况, 精确到天 此工具类在此基础之上进行优化, 分为俩种情况, 精确到分钟,保留俩位小数 (精确到秒 需自己加工下) 入口方法: getWorkHours
报表工具大致可以分为两类:**纯Java报表工具**与**支持Java的报表工具**。 - **支持Java的报表工具**:这类工具虽然不是完全基于Java开发,但能够在Java环境中运行,例如通过报表服务器(如Business Objects、...
网上很多资源都没有输出结果是(相差几年几个月几天的代码)希望对大家有帮助 有不足地方 望大家多多指点
### Java实现Web报表打印功能:基于iText组件的实践 #### 概述 在Web应用领域,打印功能一直是开发者面临的挑战之一。由于Web应用本质上属于瘦客户端架构,直接操作客户端设备(如打印机)存在限制。这促使业界...
本教程主要聚焦于使用JAVA和IREPORT来实现报表功能,包括PDF和EXCEL的生成。下面将详细介绍这两个技术及其结合使用的方法。 JAVA,全称Java编程语言,是一种广泛应用于服务器端开发的高级编程语言,具有跨平台、...