java 求两个日期差几个月

有两个GregorianCalendar日期,计算他们之间差几个月,结果保存为double。转换成毫秒的形式可以计算差多少天是没错,但是用毫秒判断月份是有误差的吧,因为月... 有两个GregorianCalendar日期,计算他们之间差几个月,结果保存为double。

转换成毫秒的形式可以计算差多少天是没错,但是用毫秒判断月份是有误差的吧,因为月份不是每个月都30(或31)天。求一个合理解决方案,比如2012-11-24 14:20:00和2012-5-24 14:20:00应该正好得出6.0
展开
 我来答
bd9006
2012-11-24 · TA获得超过2.5万个赞
知道大有可为答主
回答量:4.8万
采纳率:63%
帮助的人:1.6亿
展开全部
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;
}
}

天以下,要自己添加判断
artintin
推荐于2016-09-25 · TA获得超过1.2万个赞
知道大有可为答主
回答量:7508
采纳率:80%
帮助的人:2850万
展开全部
你可以如此计算,
年份差、月份差算出整数部分
小数部分再按剩余日期、时分秒按其在当月的比例计算
如2012-11-24 14:20:00和2012-5-24 14:20:00
年差为0,月差为6,其他差为0,结果为6.0
若其中出现某差为负数,需调整
如2012-11-24 14:20:00和2012-5-31 14:20:00
年差为0,月差为6,日差为-6,将月差改为5,

即先计算和2012-6-24 14:20:00的差,
2012-6-24 14:20:00到2012-5-31 14:20:00再计算,
可按6月份2012-6-24 14:20:00到2012-6-01 00:00:00 占6月份比例
再计算5月份2012-5-31 24:00:00到2012-5-31 14:20:00占5月份比例
两个比例加起来是小数部分。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友12ee0fd
2012-11-24 · TA获得超过4.7万个赞
知道大有可为答主
回答量:1.1万
采纳率:66%
帮助的人:2338万
展开全部
使用joda-time:
DateTime from = new DateTime(2012, 11, 24 ,14 , 20 , 0);
DateTime to = new DateTime(2012, 5 , 24 , 14, 20 , 0);
int months = Months.monthsBetween(from,to).getMonths(); // -6
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式