java计算工龄
计算工龄原则:若是2000-10-12作为开始工作时间,则到下一年的2001-10-13算为一年。有个bug,不满一年的工龄是错误的。
import java.util.Date;
import java.util.Calendar;
public int workAge(Date nowTime, Date workTime){
    int year = 0;
    //当前时间的年月日
    Calendar cal = Calendar.getInstance();
    cal.setTime(nowTime);
    int nowYear = cal.get(Calendar.YEAR);
    int nowMonth = cal.get(Calendar.MONTH);
    int nowDay = cal.get(Calendar.DAY_OF_MONTH);
    //开始工作时间的年月日
    cal.setTime(workTime);
    int workYear = cal.get(Calendar.YEAR);
    int workMonth = cal.get(Calendar.MONTH);
    int workDay = cal.get(Calendar.DAY_OF_MONTH);
    //得到工龄
    year = nowYear - workYear; //得到年差
    //若目前月数少于开始工作时间的月数,年差-1
    if (nowMonth < workMonth){
        year  = year - 1;
    }else if (nowMonth == workMonth){
        //当月数相等时,判断日数,若当月的日数小于开始工作时间的日数,年差-1
        if (nowDay < workDay){
            year = year - 1;
        }
    }
    return year;
}
      /**
	 * 计算工龄
	 * @param begin "yyyy-MM-dd"
	 * @return double
	 * @throws ParseException
	 */	 
	 public static double workYears(String begin) {
	        Calendar dayEnd = Calendar.getInstance();
	        Calendar dayBegin = Calendar.getInstance();
	            try {
					dayBegin.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(begin));
				} catch (ParseException e) {
					e.printStackTrace();
				}
	        //初始计算
	        double result= dayEnd.get(Calendar.MONTH) +dayEnd.get(Calendar.YEAR)*12
	                -dayBegin.get(Calendar.MONTH) - dayBegin.get(Calendar.YEAR)*12;
	        //BigDecimal.ROUND_HALF_UP表示四舍五入,BigDecimal.ROUND_HALF_DOWN也是五舍六入,BigDecimal.ROUND_UP表示进位处理(就是直接加1),BigDecimal.ROUND_DOWN表示直接去掉尾数。
	        return new BigDecimal(result/12).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
	    }

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号