1.根据两个时间段判断是否为一年 格式(20230206-20240205)
/* 校验年 格式(20230206-20240205) */
public Boolean checkYear(Date date1, Date date2){
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
Calendar calendar = new GregorianCalendar();
calendar.setTime(date1);
// 把日期往后增加一年
calendar.add(Calendar.YEAR, 1);
//把日期往前一天
calendar.add(Calendar.DATE, -1);
//如果相同就是一年
if (ToolUtil.equals(dateFormat.format(date2),dateFormat.format(calendar.getTime()))){
return true;
}else{
return false;
}
}
2. 根据两个时间校验是否为一个月 格式(20230206-20230305)
/* 校验月 格式(20230206-20230305) */
public Integer checkMonth(Date date1, Date date2){
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
Calendar calendar = new GregorianCalendar();
calendar.setTime(date1);
// 把日期往后增加一月
calendar.add(Calendar.MONTH, 1);
//把日期往前一天
calendar.add(Calendar.DATE, -1);
//如果相同就是一月
if (ToolUtil.equals(dateFormat.format(date2),dateFormat.format(calendar.getTime()))){
return 1;
}else{
return 0;
}
}
3. 根据两个时间计算月份(不足30天按一个月)
/** 参数(开始日期,结束日期) **/
public Integer calculateContractPeriod(Date date1, Date date2){
//判断如果开始时间,结束时间有一个为空直接返回0
if (ToolUtil.isEmpty(date1)||ToolUtil.isEmpty(date2)){
return 0;
}
//计算天数
long days = ((date2.getTime() - date1.getTime()) / (1000*3600*24))+1;
//小于30天 算一个月
if (days<=30){
return 1;
}else{
Calendar calendar = new GregorianCalendar();
calendar.setTime(date2);
// 把日期往后增加一天,整数往后推,负数往前移动
calendar.add(Calendar.DATE, 1);
// 这个时间就是日期往后推一天的结果
date2 = calendar.getTime();
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(date1);
c2.setTime(date2);
//结束时间小于开始时间直接返回0
if (c2.getTimeInMillis() < c1.getTimeInMillis()) return 0;
int year1 = c1.get(Calendar.YEAR);
int year2 = c2.get(Calendar.YEAR);
int month1 = c1.get(Calendar.MONTH);
int month2 = c2.get(Calendar.MONTH);
int day1 = c1.get(Calendar.DAY_OF_MONTH);
int day2 = c2.get(Calendar.DAY_OF_MONTH);
int yearInterval = year2 - year1;
if (month2 < month1 || month1 == month2 && day2 < day1) yearInterval--;
int monthInterval = (month2 + 12) - month1;
if (day2 < day1) monthInterval--;
monthInterval %= 12;
int moresu = yearInterval * 12 + monthInterval;
return moresu;
}
}
4. 获取当前时间N天后的时间(字符串)
/** 获取当前时间N天后的时间 **/
public String getAfterDayDate(String days) {
int daysInt = Integer.parseInt(days);
Calendar canlendar = Calendar.getInstance(); // java.util包
canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
Date date = canlendar.getTime();
SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = sdfd.format(date);
return dateStr;
}
5.获取N天以后是周几
/* 得到n天之后是周几*/
public static String getAfterDayWeek(String days) {
int daysInt = Integer.parseInt(days);
Calendar canlendar = Calendar.getInstance(); // java.util包
canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动
Date date = canlendar.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("E");
String dateStr = sdf.format(date);
return dateStr;
}
6. 获取当前时间的周一和周日的日期
/*获取当前时间的周一及周日*/
public Map<String,String> getWeekDate(Date date) {
Map<String,String> map = new HashMap();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.setTime(date);
// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
cal.setFirstDayOfWeek(Calendar.MONDAY);
// 获得当前日期是一个星期的第几天
int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
if(dayWeek==1){
dayWeek = 8;
}
// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - dayWeek);
Date mondayDate = cal.getTime();
String weekBegin = sdf.format(mondayDate);
//获取星期日
cal.add(Calendar.DATE, 4 +cal.getFirstDayOfWeek());
Date sundayDate = cal.getTime();
String weekEnd = sdf.format(sundayDate);
map.put("mondayDate", weekBegin);
map.put("sundayDate", weekEnd);
return map;
}