Working Code:
public int monthsBetweenDates(Date startDate, Date endDate){
Calendar start = Calendar.getInstance();
start.setTime(startDate);
Calendar end = Calendar.getInstance();
end.setTime(endDate);
int monthsBetween = 0;
int dateDiff = end.get(Calendar.DAY_OF_MONTH)-start.get(Calendar.DAY_OF_MONTH);
if(dateDiff<0) {
int borrrow = end.getActualMaximum(Calendar.DAY_OF_MONTH);
dateDiff = (end.get(Calendar.DAY_OF_MONTH)+borrrow)-start.get(Calendar.DAY_OF_MONTH);
monthsBetween--;
if(dateDiff>0) {
monthsBetween++;
}
}
else {
monthsBetween++;
}
monthsBetween += end.get(Calendar.MONTH)-start.get(Calendar.MONTH);
monthsBetween += (end.get(Calendar.YEAR)-start.get(Calendar.YEAR))*12;
return monthsBetween;
}
Run Code Online (Sandbox Code Playgroud)
你可以使用Calendar像,
static int monthsBetween(Date a, Date b) {
Calendar cal = Calendar.getInstance();
if (a.before(b)) {
cal.setTime(a);
} else {
cal.setTime(b);
b = a;
}
int c = 0;
while (cal.getTime().before(b)) {
cal.add(Calendar.MONTH, 1);
c++;
}
return c - 1;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样称呼它
public static void main(String[] args) {
String start = "01/01/2012";
String end = "31/07/2014";
DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
try {
System.out.println(monthsBetween(sdf.parse(start), sdf.parse(end)));
} catch (ParseException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
输出是
30
Run Code Online (Sandbox Code Playgroud)
或者,使用Joda-Time
String start = "01/01/2012";
String end = "31/07/2014";
DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
try {
LocalDate a = LocalDate.fromDateFields(sdf.parse(start));
LocalDate b = LocalDate.fromDateFields(sdf.parse(end));
Period p = new Period(a, b);
System.out.println((p.getYears() * 12) + p.getMonths());
} catch (ParseException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
输出也是
30
Run Code Online (Sandbox Code Playgroud)
编辑
最后(如评论中所述),如果您使用的是Java 8,则可以使用新的java.time类
String start = "01/01/2012";
String end = "31/07/2014";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate from = LocalDate.parse(start, formatter);
LocalDate to = LocalDate.parse(end, formatter);
System.out.println(from.until(to, ChronoUnit.MONTHS));
Run Code Online (Sandbox Code Playgroud)
输出是(仍)
30
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11681 次 |
| 最近记录: |