`

Java 政府 工作日计算

阅读更多
package com.jc.servlet;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class Test {

	
	//计算工作日实际日期
	@org.junit.Test
	public void test() {
		 try {
		        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");  
		        Calendar ca = Calendar.getInstance();  
		        Date d = df.parse("2016-12-8");  
		        ca.setTime(d);//设置当前时间  
		          
		        
		        initHolidayList("2014-11-06");//初始节假日  
		        initHolidayList("2014-11-07");//初始节假日  
		        initHolidayList("2014-11-03");//初始节假日  
		          
		        Calendar c = addDateByWorkDay(ca,3);  
		        System.out.println(df.format(c.getTime()));  
		          
		    } catch ( Exception e) {
		        // TODO: handle exception
		        System.out.println(e.getClass());
		        e.printStackTrace();
		    }
	}
	
	@org.junit.Test
	public void test2 () throws Exception{
		String sdate = "2016-12-08";
		String edate = "2016-12-13";
		long day = getDaySub(sdate,edate);
		System.out.println(day);
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd");  
        Calendar ca = Calendar.getInstance();  
        Date d = df.parse(sdate);  
        ca.setTime(d);//设置当前时间  
		long gzr = endDay_startDay(ca,day);
		
		System.out.println(gzr);
	}

	/**
	 * 两个日期相减
	 * @param beginDateStr
	 * @param endDateStr
	 * @return
	 */
	public static long getDaySub(String beginDateStr,String endDateStr){
		long day=0;
		SimpleDateFormat format = new java.text.SimpleDateFormat("yyyy-MM-dd");
		Date beginDate;
		Date endDate;
		try{
			beginDate = format.parse(beginDateStr);
			endDate= format.parse(endDateStr);
			day=(endDate.getTime()-beginDate.getTime())/(24*60*60*1000);
		//System.out.println("相隔的天数="+day);
		} catch (ParseException e){
		// TODO 自动生成 catch 块
			e.printStackTrace();
		}
		return day+1;
	}
	 /**
	  * 自定义节假日
	  */
	 private static List<Calendar> holidayList = new ArrayList<Calendar>();  //节假日列表  
	 /**
	  * 计算一个日期后的多少天有几个休息日,并用使用天数减去工作日获得实际工作日。
	  * @param calendar
	  * @param day
	  * @return
	  * @throws Exception
	  */
	 public static long endDay_startDay(Calendar calendar,long day) throws Exception{
		 long result = 0;
		 for (int i=0; i<day; i++){
			 calendar.add(Calendar.DAY_OF_MONTH, 1);
			 if(checkHoliday(calendar)){
				 result++;
             }
		 }
		 
		 return day-result-1;
	 }
	 
	 /**  
	  *   
	  * <p>Title: addDateByWorkDay </P>  
	  * <p>Description: TODO  计算相加day天,并且排除节假日和周末后的日期</P>  
	  * @param calendar  当前的日期  
	  * @param day  相加天数  
	  * @return     
	  * return Calendar    返回类型   返回相加day天,并且排除节假日和周末后的日期  
	  * throws   
	  * date 2014-11-24 上午10:32:55  
	  */  
	 public static Calendar addDateByWorkDay(Calendar calendar,int day){  
	       
	     try {  
	        for (int i = 0; i < day; i++) {
	              
	             calendar.add(Calendar.DAY_OF_MONTH, 1);  
	               
	             if(checkHoliday(calendar)){
	                 i--;  
	             }
	        }
	        return calendar;  
	          
	       
	    } catch (Exception e) {  
	        e.printStackTrace();  
	    }  
	    return calendar;  
	 }
	 
	 /**
	  * 
	  * @param calendar
	  * @param day
	  * @return
	  */
	 public Calendar addDateDay(Calendar calendar,int day){  
	       
	     try {  
	        for (int i = 0; i < day; i++) {  
	              
	             calendar.add(Calendar.DAY_OF_MONTH, 1);  
	               
	             if(checkHoliday(calendar)){  
	                 i++;  
	             }
	        }
	        return calendar;  
	          
	       
	    } catch (Exception e) {  
	        e.printStackTrace();  
	    }  
	    return calendar;  
	 }
	 
	 /**  
	  *   
	  * <p>Title: checkHoliday </P>  
	  * <p>Description: TODO 验证日期是否是节假日</P>  
	  * @param calendar  传入需要验证的日期  
	  * @return   
	  * return boolean    返回类型  返回true是节假日,返回false不是节假日  
	  * throws   
	  * date 2014-11-24 上午10:13:07  
	  */  
	 public static boolean checkHoliday(Calendar calendar) throws Exception{  
	       
	     //判断日期是否是周六周日  
	     if(calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY ||   
	             calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY){  
	         return true;  
	     }  
	     //判断日期是否是节假日  
	     for (Calendar ca : holidayList) {  
	        if(ca.get(Calendar.MONTH) == calendar.get(Calendar.MONTH) &&  
	                ca.get(Calendar.DAY_OF_MONTH) == calendar.get(Calendar.DAY_OF_MONTH)&&  
	                ca.get(Calendar.YEAR) == calendar.get(Calendar.YEAR)){  
	            return true;  
	        }
	    }  
	        
	     return false;  
	 }  
	   
	 /**  
	  *   
	  * <p>Title: initHolidayList </P>  
	  * <p>Description: TODO  把所有节假日放入list</P>  
	  * @param date  从数据库查 查出来的格式2014-05-09  
	  * return void    返回类型   
	  * throws   
	  * date 2014-11-24 上午10:11:35  
	  */  
	public static void initHolidayList( String date){  
	      
	        String [] da = date.split("-");
	        Calendar calendar = Calendar.getInstance();  
	        calendar.set(Calendar.YEAR, Integer.valueOf(da[0]));  
	        calendar.set(Calendar.MONTH, Integer.valueOf(da[1])-1);//月份比正常小1,0代表一月  
	        calendar.set(Calendar.DAY_OF_MONTH, Integer.valueOf(da[2]));  
	        holidayList.add(calendar);  
	}
	
	/**
	 * 判断星期六与星期日
	 * @param bDate 
	 * @param aDate
	 * @return
	 * @throws ParseException
	 */
	public boolean isSunAndSatur(String bDate) throws ParseException{
		DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");        
		//String bDate = "2016-12-19";
		//String aDate = "2016-12-30";
		Date bdate = format1.parse(bDate);
		Calendar cal = Calendar.getInstance();
		cal.setTime(bdate);
		if(cal.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY||cal.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
			System.out.print("ok");
			return true;
		}else {
			System.out.print("no");
			return false;
		}
	}
}

 

分享到:
评论

相关推荐

    中国节假日日历:china-holiday-calender

    节假日信息来自中国政府网,一手信息、权威准确 包含最近3年的节假日信息,机器人自动维护,更新及时 日历标题包含放假、补班的天数信息 日历标题包含放假、补班等关键字,方便脚本开发。例如使用iPhone的快捷指令...

    计算机软件JAVA编程优势及其应用研究.pdf

    随着中国信息技术的不断进步,Java编程技术的应用范围日益扩大,在计算机软件开发领域扮演着越来越重要的角色,并逐步成为一门不可或缺的编程语言。Java语言以其即时性、独立性、安全性的优势,在众多编程语言中...

    java实现数字签名

    随着信息技术的发展,电子政务成为了提高政府工作效率和服务质量的重要手段。然而,互联网的开放性也给电子政务带来了诸多安全挑战,如信息泄露、数据篡改等问题。为了确保电子政务系统的安全性,必须采取有效措施...

    编程语言JavaRMI入门教程.pdf

    本文档是关于Java远程方法调用...整体而言,这份教程为Java RMI的初学者提供了一个系统的学习路径,并且详细解释了Java RMI工作原理和组件构成。尽管教程的内容较旧,对于学习Java RMI的基本知识和概念仍有很大的帮助。

    关于计算机人才需求的调研报告-论文.zip

    9. **全球化视野**:随着全球化的推进,跨国合作和远程工作的趋势日益明显,报告可能探讨了全球化背景下的计算机人才流动与合作模式。 10. **挑战与机遇**:报告可能会分析计算机人才面临的挑战,如快速更新的技术...

    计算机信息技术1108375040.pptx

    计算机信息技术是现代社会中不可或缺的基础,它涵盖了从计算机的起源、分类到其工作原理以及广泛应用的诸多方面。在本篇文档中,我们将深入探讨这些关键知识点。 首先,让我们回顾计算机的历史。1946年,世界上第一...

    计算机专业毕业设计第一章 前言 随着计算机的不断普及,社会上的各行各业都开始由计算机主宰着,不论是政府、企业、教育等各个单位的各

    随着计算机的普及,企业和机构对信息化管理的需求日益增加,这样的系统可以有效地减轻杂志社的管理工作量,提高效率。 该系统主要包含两个核心功能模块:杂志订阅管理和公司信息管理。杂志订阅管理模块关注于维护...

    [高级Java开发工程师岗位具体内容说明]java开发工程师岗位简介 (2).docx

    1. **教育背景与工作经验**:计算机相关专业,至少3年Java工作经验,有政府信息化或智慧城市项目经验优先。 2. **数据库技能**:熟练使用SQL,掌握MySQL、Oracle等主流数据库。 3. **J2EE框架**:精通Spring、...

    java-医院门诊管理系统(源码+论文)

    计算机从之前的一个只有政府或是科研事业才能触及到的信息化产品变为人们工作与生活中不可或缺的必需品并且伴随着国家经济水平与基础设施的不断提升,人们在满足日常温饱基本需求后,日益对更加健康的身体有了更高的...

    计算机行业的发展前景.docx

    网络方向则涉及IT企业、政府、企事业单位等多个行业,从事网络建设和管理工作。随着信息技术的普及,教育、非公有制经济实体等也开始大量吸纳计算机专业人才。 就业趋势显示,企业已经成为吸纳计算机人才的主要力量...

    计算机专业实习总结范文3000字.doc

    在今后的工作中,我们需要持续学习新的技术,如响应式设计、前端框架(如React、Vue.js)以及后端开发(如Java、Python),以便更好地适应快速变化的IT行业。同时,团队协作、沟通技巧和项目管理能力也是我们在实习...

    云计算-基于计算经济的网格资源管理研究.pdf

    与传统分布式计算相比,网格计算更加强调大规模资源共享、协同工作及高性能计算能力。 ##### 2.2 发展阶段 网格计算经历了从概念提出到广泛应用的发展过程: - **初始阶段**:主要集中在理论研究和技术验证上。 - *...

    计算机专业就业形势。。。。。

    例如,Java、C++、.NET等编程语言的需求量大,而网络安全和数据分析也逐渐成为热门岗位。同时,由于外包服务的兴起,掌握英语和其他外语的计算机专业人才也更受市场欢迎。 就业方向多样化 计算机专业毕业生的就业...

    ofd2img.zip

    在信息技术日益发达的今天,电子文档格式的多样化使得文件转换成为了日常工作中不可或缺的一部分。OFD(Open Fixed Document Format)是中国国家标准的一种电子文档格式,主要用于存储政府公文、法律文件等,具有...

    java获取当前时间戳的方法.doc.docx

    对于标签“事业编”,这可能是指在事业单位或政府机构中进行的编程工作,这些环境通常对程序的稳定性和效率有较高要求。因此,在编写这类项目时,选择高效的时间戳获取方法是必要的,同时也要考虑代码的可读性和维护...

    计算机系统维护专业人才培养方案.pdf

    适合在政府机关、企事业单位、软件公司、网络公司等领域从事软件开发、使用、维护、策划、营销,以及网络规划、设计、集成、管理和安全防护等工作。通过三年的全日制学习,学生将获得必要的理论知识和实践操作能力。...

    计算机科学与技术_基于Java的贫困生管理系统的设计与实现.docx

    随着教育公平理念在全球范围内的推广,各国政府对于贫困学生的关注度日益提高。为了确保每一位学生都有机会接受良好的教育,我国也在不断完善贫困生帮扶政策,并通过科技手段优化管理流程。在这一背景下,“基于Java...

    计算机专业毕业论文--办公自动化管理系统.doc

    20世纪70年代中期以来,随着科技的飞速发展,传统的手工办公模式逐渐无法满足日益繁重且复杂的办公需求。办公自动化系统应运而生,旨在通过集成信息技术,实现文件处理、信息传递、资源共享、决策支持等工作的自动化...

    2021-2022计算机二级等级考试试题及答案No.4122.docx

    - `System.currentTimeMillis()` 方法返回当前时间与 1970 年 1 月 1 日午夜之间的毫秒数。 ### C# 数据类型 13. **C#中的数据类型包括** - **值类型** 包括整型(如 int)、浮点型(如 float)和枚举等。 - *...

    基于创新能力培养的计算机应用型人才培养模式改革研究与实践.docx

    3. **公共服务与科研机构**:政府机关、科研机构等也需要大量的计算机专业人才来进行数据分析、系统维护等工作。 ##### 存在的问题 1. **理论与实践脱节**:目前,许多高校的计算机教育过于侧重理论教学,忽视了...

Global site tag (gtag.js) - Google Analytics