Java 年月的计算

    /**
* 获取指定年月的第一天
* @param year
* @param month
* @return
*/
public static Date getFirstDayOfMonth1(int year, int month) throws ParseException {
Calendar cal = Calendar.getInstance();
//设置年份
cal.set(Calendar.YEAR, year);
//设置月份
cal.set(Calendar.MONTH, month-1);
//获取某月最小天数
int firstDay = cal.getMinimum(Calendar.DATE);
//设置日历中月份的最小天数
cal.set(Calendar.DAY_OF_MONTH,firstDay);
//格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date =sdf.parse(sdf.format(cal.getTime()));
return date;
}
/**
* 获取指定年月的最后一天
* @param year
* @param month
* @return
*/
public static Date getLastDayOfMonth1(int year, int month) throws ParseException {
Calendar cal = Calendar.getInstance();
//设置年份
cal.set(Calendar.YEAR, year);
//设置月份
cal.set(Calendar.MONTH, month-1);
//获取某月最大天数
int lastDay = cal.getActualMaximum(Calendar.DATE);
//设置日历中月份的最大天数
cal.set(Calendar.DAY_OF_MONTH, lastDay);
//格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date =sdf.parse(sdf.format(cal.getTime()));
return date;
}
/*时间比大小*/
public int timeCompare(String t1,String t2){
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM");
Calendar c1=Calendar.getInstance();
Calendar c2=Calendar.getInstance();
try {
c1.setTime(formatter.parse(t1));
c2.setTime(formatter.parse(t2));
} catch (ParseException e) {
e.printStackTrace();
}
int result=c1.compareTo(c2);
return result;
}
/*时间相减获取天数*/
public static int differentDaysByMillisecond(Date date1,Date date2)
{
// int days = (int) ((date2.getTime() - date1.getTime()) / (1000*3600*24));
long days=(date2.getTime()-date1.getTime())/(24*60*60*1000)+1;
return (int) days;
}


SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                String[] time = statistics.getAttenceDate().split("-");
                if (time.length!=2){
                    ResultUtil.error("年月格式不规范");
                }
                askLeaves.forEach(askLeave -> {
                    try {
                        //开始日期结束日期都在当前月
                        if(timeCompare(statistics.getAttenceDate(),askLeave.getStartDate())==0&&timeCompare(statistics.getAttenceDate(),askLeave.getEndDate())==0){
                            //获取请假天数
                            int day = differentDaysByMillisecond(sdf.parse(askLeave.getStartDate()),sdf.parse(askLeave.getEndDate()));
                            if(hashMap.get(askLeave.getLeaveTypeCode())==null){
                                hashMap.put(askLeave.getLeaveTypeCode(),day);
                            }else{
                                hashMap.put(askLeave.getLeaveTypeCode(),hashMap.get(askLeave.getLeaveTypeCode())+day);
                            }
                        }
                        //开始月在当前月结束月不在
                        if(timeCompare(statistics.getAttenceDate(),askLeave.getStartDate())==0&&timeCompare(statistics.getAttenceDate(),askLeave.getEndDate())!=0) {
//                            //获取指定月最后一天
                            int day = differentDaysByMillisecond(sdf.parse(askLeave.getStartDate()),getLastDayOfMonth1(Integer.valueOf(time[0]),Integer.valueOf(time[1])));
                            hashMap.put(askLeave.getLeaveTypeCode(),day);
                        }
                        //结束月在当前月开始月不在
                        if(timeCompare(statistics.getAttenceDate(),askLeave.getStartDate())!=0&&timeCompare(statistics.getAttenceDate(),askLeave.getEndDate())==0) {
//                            calendar.add(Calendar.MONTH, 0);
                            //获取指定月第一天
                            int day = differentDaysByMillisecond(getFirstDayOfMonth1(Integer.valueOf(time[0]),Integer.valueOf(time[1])),sdf.parse(askLeave.getEndDate()));
                            hashMap.put(askLeave.getLeaveTypeCode(),day);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                });

 

posted @ 2021-01-04 11:23  明月出青山root  阅读(729)  评论(0编辑  收藏  举报