java计算工龄

计算工龄原则:若是2000-10-12作为开始工作时间,则到下一年的2001-10-13算为一年。有个bug,不满一年的工龄是错误的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
* 计算工龄
* @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();
   }

  

posted @   Ning-  阅读(350)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
点击右上角即可分享
微信分享提示