• java 两个日期之间的标准工作日(原创)


    package control;
    
    
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    
    import java.util.Date;
    import java.util.Map;
    
    import javax.servlet.jsp.jstl.sql.Result;
    
    public class DateOper {
    	private String holidays;
    	private String workdays;
    	private DB_OPER db=new DB_OPER();
    	public DateOper()
    	{
    		Result result = null;
    		String sqlholiday = "select holidaydate from hrmpubholiday t where changetype=1";// 这个表手动维护,由国务院发布放假通知后添加
    		String sqlworkday = "select holidaydate from hrmpubholiday t where changetype=3";
    
    		result = db.executeQuery(sqlholiday);
    		// 得到今年和明年的所有的假日
    
    
       	 if(result!=null && result.getRowCount()!=0)
       	 {
       		 for(int i=0;i<result.getRowCount();i++)
       		 {
       			 Map row = result.getRows()[i]; 
       	      	
       			holidays += row.get("holidaydate").toString() + ",";
       
       		 }
       	 }
       	  System.out.println(holidays);
    
    	// 得到今年和明年的所有的假日
    
       	result = db.executeQuery(sqlworkday);
    	 if(result!=null && result.getRowCount()!=0)
    	 {
    		 for(int i=0;i<result.getRowCount();i++)
    		 {
    			 Map row = result.getRows()[i]; 
    	      	
    			 workdays += row.get("holidaydate").toString() + ",";
    	
    		 }
    	 }
    	  System.out.println(workdays);
    	}
    	public  int countWorkDay(String start1, String end1) 
    	{
    		
    		 
    		 String strsql;
    		// 工作日
    		int workDay = 0;
    		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    		Date start=null;
    		Date end = null;
    
    		try {
    			start=(Date) sdf.parse(start1);
    			end = (Date) sdf.parse(end1);
    		} catch (ParseException e) {
    		System.out.println("非法的日期格式,无法进行转换");
    		e.printStackTrace();
    		}
    		//int thisyear = start.getYear() + 1900;
    		//int nextyear = thisyear == end.getYear() ? thisyear + 1 : end.getYear() + 1900;
    
    		System.out.println("start>>"+start+"   end>>"+end);
    		int days = getDutyDays(start, end);
    		System.out.println("start>>"+start1+"   end>>"+end1+"   days>>"+days);
    		return days;
    	}
     
    
    
    	public  int getDutyDays(Date StartDate,Date EndDate) {//得到非周六周日的工作日
    		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    		StartDate.setDate(StartDate.getDate() + 1);
    		int result = 0;
    		while (StartDate.compareTo(EndDate) <= 0) {
    		
    			if (StartDate.getDay() != 6 && StartDate.getDay() != 0)//周内
    			{
    				    result++;
    				 // System.out.println(holidays);
    				  if(!holidays.isEmpty())
    				{
    					  if(holidays.indexOf(sdf.format(StartDate))>-1)//不是节假日加1
    					result--;
    				}
    				
    			}
    			else	//周末
    			{    if(!workdays.isEmpty())
    			     {
    				if(workdays.indexOf(sdf.format(StartDate))>-1)//工作日
    				 result++;
    			     }
    			}
    		//	System.out.println(StartDate+"-------"+StartDate.getDay()+"-----"+result+"******"+holidays.indexOf(sdf.format(StartDate))+"******"+workdays.indexOf(sdf.format(StartDate)));
    		StartDate.setDate(StartDate.getDate() + 1);
    		}
    		return result;
    		}
    	
    	public static void main(String[] args) throws Exception {
    
    		 
    		DateOper db=new DateOper();
    		
    		int workDays=db.countWorkDay("2016-2-10","2016-2-26");
    	    System.out.println("workdays="+workDays);
    
        }  
    }
    

      

  • 相关阅读:
    浏览器的垃圾回收机制
    vue-router传参数的方式
    Vue插槽
    自定义事件
    vue计算属性和监听器
    vue绑定样式
    循环中使用同步请求
    小白之路 | 从小学一年级期末考试看servlet+jsp技术
    Java实现简单计算器的探索性做法
    分布式数据库NoSQL简介
  • 原文地址:https://www.cnblogs.com/zzlp/p/5166605.html
Copyright © 2020-2023  润新知