Java 日期月份处理小工具类

sql的月份和日期查询中,可能会需要将日期或者月份相应推迟/提前一天或一段时间,当然,这个逻辑放在sql中也是可以的,具体还是要看需求是否合适。分享三个小方法,一个是计算月份差、日期加减一/多天、月份加减一/多天

月份差

输入参数:
  • startMonth
    • 字符串,格式应该为yyyy-MM对应下面SimpleDateFormat("yyyy-MM");可根据需要更改格式
  • endMonth
    • 字符串,格式应该为yyyy-MM对应下面SimpleDateFormat("yyyy-MM");可根据需要更改格式
返回值
  • diff
    • 整型,月份差值,如3月-6月 返回3
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
33
34
35
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月4 返回3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
    • 整型,偏移量 为正 月份往后加,负 时间往前推
返回值
  • date
    • String,格式处理后的时间,如3月-6月 返回3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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);
}

小结

最近太水了,已经托更一周了,这次又是水了一篇,争取下次好好写一篇