计算任意2个日期内的工作日

yingyonggongchang yingyonggongchang 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
package com.archie2010.test;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
* 计算任意2个日期内的工作日(没有考虑到国定假日)
*
* @author user
*
*/
public class DateCal {
/**
* @param args
*/
public static void main(String[] args) {
try {
String strDateStart = "2010-12-1";
String strDateEnd = "2010-12-14";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date_start = sdf.parse(strDateStart);
Date date_end = sdf.parse(strDateEnd);
DateCal app = new DateCal();
Calendar cal_start = Calendar.getInstance();
Calendar cal_end = Calendar.getInstance();
cal_start.setTime(date_start);
cal_end.setTime(date_end);
System.out.println("星期-->" + app.getChineseWeek(cal_start)
+ " 日期-->" + cal_start.get(Calendar.YEAR) + "-"
+ (cal_start.get(Calendar.MONTH) + 1) + "-"
+ cal_start.get(Calendar.DAY_OF_MONTH));
System.out.println("星期-->" + app.getChineseWeek(cal_end) + " 日期-->"
+ cal_end.get(Calendar.YEAR) + "-"
+ (cal_end.get(Calendar.MONTH) + 1) + "-"
+ cal_end.get(Calendar.DAY_OF_MONTH));
System.out.println("工作日为-->"
+ app.getWorkingDay(cal_start, cal_end));
System.out.println("休息日-->" + app.getHolidays(cal_start, cal_end));
} catch (Exception e) {
}
}
public int getDaysBetween(java.util.Calendar d1, Java.util.Calendar d2) {
if (d1.after(d2)) { // swap dates so that d1 is start and d2 is end
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}
int days = d2.get(java.util.Calendar.DAY_OF_YEAR)
- d1.get(java.util.Calendar.DAY_OF_YEAR);
int y2 = d2.get(java.util.Calendar.YEAR);
if (d1.get(java.util.Calendar.YEAR) != y2) {
d1 = (java.util.Calendar) d1.clone();
do {
days += d1.getActualMaximum(java.util.Calendar.DAY_OF_YEAR);
d1.add(java.util.Calendar.YEAR, 1);
} while (d1.get(java.util.Calendar.YEAR) != y2);
}
return days;
}
/**
* 计算2个日期之间的相隔天数
*
* @param d1
* @param d2
* @return
*/
public int getWorkingDay(java.util.Calendar d1, java.util.Calendar d2) {
int result = -1;
if (d1.after(d2)) { // swap dates so that d1 is start and d2 is end
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}
int betweendays = getDaysBetween(d1, d2);
int charge_date = 0;
int charge_start_date = 0;// 开始日期的日期偏移量
int charge_end_date = 0;// 结束日期的日期偏移量
// 日期不在同一个日期内
int stmp;
int etmp;
stmp = 7 - d1.get(Calendar.DAY_OF_WEEK);
etmp = 7 - d2.get(Calendar.DAY_OF_WEEK);
if (stmp != 0 && stmp != 6) {// 开始日期为星期六和星期日时偏移量为0
charge_start_date = stmp - 1;
}
if (etmp != 0 && etmp != 6) {// 结束日期为星期六和星期日时偏移量为0
charge_end_date = etmp - 1;
}
// }
result = (getDaysBetween(this.getNextMonday(d1), this.getNextMonday(d2)) / 7)
* 5 + charge_start_date - charge_end_date;
// System.out.println("charge_start_date>" + charge_start_date);
// System.out.println("charge_end_date>" + charge_end_date);
// System.out.println("between day is-->" + betweendays);
return result;
}
public String getChineseWeek(Calendar date) {
final String dayNames[] = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五",
"星期六" };
int dayOfWeek = date.get(Calendar.DAY_OF_WEEK);
// System.out.println(dayNames[dayOfWeek - 1]);
return dayNames[dayOfWeek - 1];
}
/**
* 获得日期的下一个星期一的日期
*
* @param date
* @return
*/
public Calendar getNextMonday(Calendar date) {
Calendar result = null;
result = date;
do {
result = (Calendar) result.clone();
result.add(Calendar.DATE, 1);
} while (result.get(Calendar.DAY_OF_WEEK) != 2);
return result;
}
/**
*
* @param d1
* @param d2
* @return
*/
public int getHolidays(Calendar d1, Calendar d2) {
return this.getDaysBetween(d1, d2) - this.getWorkingDay(d1, d2);
}
}
...全文

相关推荐

计算任意2个日期内的工作日、休息日、天数间隔(没有考虑到国定假日)

可以计算出指定的两个年月日之间的工作日、休息日天数、两个日期天数间隔数、以及指定两个日期所属星期几。对于任意2个日期比如:date_start=2006-1

CAAC-Neusoft

计算两个日期之间工作日天数(c#实现)

通过以上步骤,我们可以有效地使用C#语言来计算任意两个日期之间的工作日数量,这对于各种业务场景都具有很高的实用价值。

litomboy

ThinkPHP中获取指定日期后工作日的具体日期方法

根据需要查询的日期数量,增加索引以得到目标工作日的日期。通过这种方法,我们可以精确地获取到指定日期之后的任意数量的工作日。这种方法适用于需要动态计算工作日的场景,如薪资计算、任务调度等。

weixin_38733787

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

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

qixizuoli

计算报告周最后一天的日期

C#中,我们可以使用DateTime结构的DayOfWeek枚举来获取日期是星期几。接下来,我们可以通过以下步骤计算出报告周的最后一天:1. **设定基准日期**:这是报告周期的起点,可以是任意日期。

weixin_38685961
评论 2
收藏 已收藏
分享
返回顶部
yingyonggongchang
Web 开发 81,108 成员 341,721 内容