import java.text.ParseException;import java.text.SimpleDateFormat;import java.io.PrintStream;public class DateDiffMonth{ public static void main(String [] argv) throws Exception { System.out.println(getMonthDiff("1900-10-21", "1901-01-01"));} / 得到两日期相差几个月 param String r...
java 求两个日期差几个月
import java.util.Date;
import java.util.Calendar;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.io.PrintStream;
public class DateDiffMonth{
public static void main(String [] argv) throws Exception {
System.out.println(getMonthDiff("1900-10-21", "1901-01-01"));
}
/**
* 得到两日期相差几个月
*
* @param String
* @return
*/
public static long getMonthDiff(String startDate, String endDate) throws ParseException {
long monthday;
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
Date startDate1 = fmt.parse(startDate);
Calendar starCal = Calendar.getInstance();
starCal.setTime(startDate1);
int sYear = starCal.get(Calendar.YEAR);
int sMonth = starCal.get(Calendar.MONTH);
int sDay = starCal.get(Calendar.DAY_OF_MONTH);
Date endDate1 = fmt.parse(endDate);
Calendar endCal = Calendar.getInstance();
endCal.setTime(endDate1);
int eYear = endCal.get(Calendar.YEAR);
int eMonth = endCal.get(Calendar.MONTH);
int eDay = endCal.get(Calendar.DAY_OF_MONTH);
monthday = ((eYear - sYear) * 12 + (eMonth - sMonth));
//这里计算零头的情况,根据实际确定是否要加1 还是要减1
if (sDay < eDay) {
monthday = monthday + 1;
}
return monthday;
}
}2012-11-24
使用joda-time:
DateTime end = new DateTime(2012, 11, 24 ,14 , 20 , 0);
DateTime start = new DateTime(2012, 5 , 24 , 14, 20 , 0);
int months = Months.monthsBetween(start, end).getMonths(); // 62012-11-25
double countMonth(GregorianCalendar date1,GregorianCalendar date2){
int i = (date1.YEAR-date2.YEAR)*12 + (date1.Month-date2.Month); // 获得月差。
double d = (date1.DAY_OF_MONTH - date2.DAY_OF_MONTH) / 30; // 这里我猜要除以当前月的天数,不过不知道是date1, 还是date2. 可从 date.MONTH 知道月份, 再查天数。
return d+i;
}
思路如上, 代码还要改进。2012-11-26
我想问,4月3号与4月2号 相差月份 是多少。
5月3号与5月2号 相差多少。
4月6号与3月5号是差多少。
遇到这种情况,你说一下。2012-11-24