Java 日期月份处理小工具类
再sql
的月份和日期查询中,可能会需要将日期或者月份相应推迟/提前一天或一段时间,当然,这个逻辑放在sql
中也是可以的,具体还是要看需求是否合适。分享三个小方法,一个是计算月份差、日期加减一/多天、月份加减一/多天
月份差
输入参数:
startMonth
- 字符串,格式应该为
yyyy-MM
对应下面SimpleDateFormat("yyyy-MM");
可根据需要更改格式
- 字符串,格式应该为
endMonth
- 字符串,格式应该为
yyyy-MM
对应下面SimpleDateFormat("yyyy-MM");
可根据需要更改格式
- 字符串,格式应该为
返回值
- diff
- 整型,月份差值,如3月-6月 返回3
public int getMonthDiff(String startMonth, String endMonth) {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM");
Date start = null;
Date end = null;
try {
start = dateFormat.parse(startMonth);
end = dateFormat.parse(endMonth);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c1.setTime(start);
c2.setTime(end);
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 = year1 - year2;
// 如果 d1的 月-日 小于 d2的 月-日 那么 yearInterval-- 这样就得到了相差的年数
if (month1 < month2 || month1 == month2 && day1 < day2) {
yearInterval--;
}
// 获取月数差值
int monthInterval = (month1 + 12) - month2;
if (day1 < day2) {
monthInterval--;
}
monthInterval %= 12;
int monthsDiff = Math.abs(yearInterval * 12 + monthInterval);
return monthsDiff;
}
日期加减
输入参数:
day
- 字符串,日期,格式应该为
yyyy-MM-dd
对应下面SimpleDateFormat("yyyy-MM-dd");
可根据需要更改格式
- 字符串,日期,格式应该为
num
- 整型,偏移量 为正 时间往后加,负 时间往前推
返回值
- date
- String,格式处理后的时间,如3月1日-3月2日 返回1
private String dayFormat(String day, int num) {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = dateFormat.parse(day);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.DATE,num);
date = c.getTime();
return dateFormat.format(date);
}
月份加减
输入参数:
day
- 字符串,日期,格式应该为
yyyy-MM
对应下面SimpleDateFormat("yyyy-MM");
可根据需要更改格式
- 字符串,日期,格式应该为
num
- 整型,偏移量 为正 月份往后加,负 时间往前推
返回值
- month
- String,格式处理后的时间,如3月-6月 返回3
private String monthFormat(String month, int num) {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM");
Date date = null;
try {
date = dateFormat.parse(month);
} catch (ParseException e) {
e.printStackTrace();
}
Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.MONTH,num);
date = c.getTime();
return dateFormat.format(date);
}