闲来无事,想起这么一个问题,所以就试着搞了搞这个算法,希望大家可以给出更加高效和牛叉的算法来求取“两个时间点间的周末天数”
import java.text.SimpleDateFormat;
import java.util.Calendar;
/**
* @author kaobian.iteye.com
* @date Apr 5, 2012
* @time 12:46:44 PM
*/
public class ComputeWorkDay {
public static void main(String[] args) {
//初始化第一个日期
Calendar c1 = Calendar.getInstance();
//初始化第二个日期,这里的天数可以随便的设置
Calendar c2 = Calendar.getInstance();
c2.add(Calendar.DAY_OF_YEAR,13);
//查看一下第二个日子的具体时间
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(c2.getTime()));
//第三个三处代表是否 去除 双休日
System.out.println(computeHolidays(c2,c1,false));
}
public static int computeHolidays(Calendar cal1,Calendar cal2,boolean ignoreHolidays){
//算出两个日期间的天数
int days = cal2.get(Calendar.DAY_OF_YEAR)-cal1.get(Calendar.DAY_OF_YEAR);
//我们的计算的天数是包含两个日期,也就是一个 闭区间
days = days > 0 ? days + 1 : 1 - days;
if(ignoreHolidays){
return days;
}
int holidays = 0;
//确定一个 大日期
if(cal1.compareTo(cal2) > 0){
Calendar temp = cal1;
cal1 = cal2;
cal2 = temp;
temp = null;
}
//只要两个日期之间相隔的天数 是7 的整数倍,那么 双休日的时间 一定为 2*(对7的整数倍)
holidays = (days/7)*2;
//去除整数倍的时间后,看看两个日期间的 周末天数
cal1.add(Calendar.DAY_OF_YEAR,(days/7)*7);
int day = -1;
//如果两个日期间的 间隔天数正好是7的整数倍也就不用 循环找周末了
do{
day = cal2.get(Calendar.DAY_OF_WEEK);
if (day == 1 || day == 7)
holidays++;
if(cal1.compareTo(cal2) == 0)
break;
cal2.add(Calendar.DAY_OF_YEAR,-1);
} while ((days%7) > 0);
return holidays;
}
}
分享到:
相关推荐
本人编写,通过自己定义的函数计算两个日期之间周末的天数和工作日天数,经过测试,非常好用
计算除周六日、法定节假日以外两个日期之间的间隔天数
拿去可以直接用的计算2个日期间相差天数,并过滤了节假日和周末。
压缩包里有2个文件,用于计算两个日期相差的工作日天数(排除周末和法定节假日): 1、excel表为2023年日历数据,并且备注工作日、周末,调休、节假日类型,可导入数据库。 2、SQL文件为2023年所有日期的插入SQL,并...
获取两个日期之间的天数,使用整数计量而不是毫秒数约算,例:2017-11-26 23:59:59 与2017-11-27 00:00:00相差天数是1.
下面小编就为大家带来一篇java计算两个日期之前的天数实例(排除节假日和周末)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
计算某个日期加上几个工作日后的一个工作日期(除周末和法定节假日),计算某个日期后一天的工作日期(除周末和法定节假日),计算两个日期的真实工作日(除周末和法定节假日),判断一个日期是否是夏季时间,计算两个时间...
主要介绍了C#获取两个时间的时间差并去除周末(取工作日)的方法,可有效的实现获取工作日的功能,涉及C#时间操作的相关技巧,需要的朋友可以参考下
天数(周几):统计两个日期之间的天数(周几)、工作日、周末数。转换器:在各种日期时间元素间转换。时区:在所有及指定的时间显示时间。UNIX日期:通过数值很大的UNIX/LINUX天/秒数来计算普通日期,或反之。
1、excel表数据为2022年周末休息日和法定节假日数据,并且备注周末和节假日类型,可导入数据库,用于计算两个日期相差的工作日天数(排除周末和法定节假日)。 2、SQL文件为2022年所有日期,并标注:工作日、法定节...
此excel表数据为2021年周末和法定节假日数据,并且备注周末和节假日类型,可导入数据库,用于计算两个日期相差的工作日天数(排除周末和法定节假日)
天库实现2个日期之间的差异。 用于计算两个日期之间差异的库。 计算天数、工作日、周末、工作日和节假日。 计算日历天数、工作日、周末、工作日和假期(固定和移动)。
SQL计算两个日期之间的工作日天数,去除法定节假日和周末
因此,它已经将开始日期和结束日期时间初始化为您当前的日期时间,只需更改一个日期时间以根据当前日期来计算过去/未来事件的年/月/周/日/小时/分钟/秒例如:你可以很快得到“你活着多少秒/天”。 统计两个日期之间...
3.5.3 DAYS——计算两个日期之间的天数 137 3.5.4 EDATE——计算从指定日期向前或向后几个月的日期 138 3.5.5 DATESTRING——将指定日期的序列号转换为文本日期 139 3.5.6 EOMONTH——计算从指定日期向前或向后...
SQL计算两个日期之间的工作日天数,去除法定节假日和周末
* 计算指定两个日期之间间隔的天数 新选择:"计算间隔天数" 允许你查找两个给定的日期 之间间隔的天数。你可以选择计算包括结束日期或排除结 束日期的间隔天数。计算结果包括指定时间段内的周数信 息,工作日...
work days.xlsx:一个演示了如果计算两个日期之间的工作天数的工作簿(除了周末和假期以外)。 Chapter 14 basic counting.xlsx:一个演示基本的计算公式的工作簿。 conditional summing.xlsx:一个演示如何使用...
店铺销售提升的数据分析 李磊 前 言 店铺销售提升有两个方面的工作: 一是现场管理,二是数据分析。作为店 铺的管理组和每一位致力于销售业绩提 升的伙伴,都应该熟悉这两方面的工作 内容,并熟练操作。 今天,我们...
优化请假模块在进行剔除工作时间的请假时间计算逻辑并修复一个因跨天签到设置导致计算不准确的BUG。 [2010-09-13] V3.4 正式版 build 20100913 1、增加开关左侧导航的功能,现在你可以有更大的视觉空间来查看...