java利用Calendar如何计算两个日期只差?

java利用Calendar如何计算两个日期只差?
如:
statdate:2014-07-20
enddate:2014-11-10
输出结果:0年3个月22天
要求说明:2014-07-20到2014-10-19为3个月,2014-10-20到2014-11-10总共有22天,得到0年3个月22天

又如:
statdate:2014-07-20
enddate:2015-05-10
输出结果:0年9个月21天
要求说明:2014-07-20到:2015-04-19为9个月,2015-04-20到2015-05-10总共有21天,得到0年9个月21天

又如:
statdate:2014-07-20
enddate:2016-05-10
输出结果:1年9个月21天
要求说明:2014-07-20到:2016-04-19为1年9个月,2016-04-20到2015-05-10总共有21天,得到1年9个月21天

跪求高手,大侠帮忙给个算法!!!感激不尽!!
后面一个要求说明错了!
应该是:

又如:
statdate:2014-07-20
enddate:2016-05-10
输出结果:1年9个月21天
要求说明:2014-07-20到:2016-04-19为1年9个月,2016-04-20到2016-05-10总共有21天,得到1年9个月21天

Java创建一个日历对象,需要引入java.util.*包,用当前时间初始化日历时间,计算两个日期之间相隔的天数,实例演示了2014年10月1日和1949年10月1日中间相隔的天数,计算方法如下:

import java.util.*;
public class CalendarDemo {
public static void main(String args[]) {
Calendar calendar = Calendar.getInstance(); //创建一个日历对象。
calendar.setTime(new Date()); //用当前时间初始化日历时间。
String year = String.valueOf(calendar.get(Calendar.YEAR));
String month = String.valueOf(calendar.get(Calendar.MONTH) + 1);
String date = String.valueOf(calendar.get(Calendar.DAY_OF_MONTH));
String day = String.valueOf(calendar.get(Calendar.DAY_OF_WEEK) - 1);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
        int minute = calendar.get(Calendar.MINUTE);
        int second = calendar.get(Calendar.SECOND);
System.out.println("现在的时间是:");
System.out.println("" + year + "å¹´" + month + "月" + date + "日 " + "星期" + day);
System.out.println("" + hour + "时" + minute + "分" + second + "秒");
calendar.set(1949, 9, 1); //将日历翻到1949å¹´10月1日,注意9表示十月。
        // è¿”回当前时间,作为从开始时间的 UTC æ¯«ç§’值。
long time1949 = calendar.getTimeInMillis();
calendar.set(2014, 9, 1); //将日历翻到2014å¹´10月1日。9表示十月。
        // è¿”回当前时间,作为从开始时间的 UTC æ¯«ç§’值。
long time2004 = calendar.getTimeInMillis();
long interdays = (time2014 - time1949) / (1000 * 60 * 60 * 24);
System.out.println("2014å¹´10月1日和1949å¹´10月1日相隔" + interdays + "天");
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-31
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class Cal {

public static void main(String[] args) throws ParseException {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date now = df.parse("2004-03-26");
java.util.Date date = df.parse("2004-01-02");
long l = now.getTime() - date.getTime();
long day = l / (24 * 60 * 60 * 1000);
System.out.println("" + day + "天");

}

}

这是相差天数的,如果要相差年份,月份,日,则还要除以年的天数

第2个回答  推荐于2016-03-22
package test;

import java.util.Calendar;
import java.util.Date;

public class A1
{
private static void calc ( String from, String to )
{
String reg = "\\-";
Calendar calendar = Calendar.getInstance ();
String[] f = from.trim ().split (reg);
String[] t = to.trim ().split (reg);

calendar.set (Integer.parseInt (f[0]), Integer.parseInt (f[1]) - 1, Integer.parseInt (f[2]));
long fd1 = calendar.getTime ().getTime ();

calendar.set (Integer.parseInt (t[0]), Integer.parseInt (t[1]) - 1, Integer.parseInt (t[2]));
long td1 = calendar.getTime ().getTime ();

String date1 = fd1 < td1 ? from : to;
String date2 = td1 > fd1 ? to : from;

f = date1.trim ().split (reg);
t = date2.trim ().split (reg);

String d3temp =  Integer.parseInt (t[1]) - 1 < 10 ?  "0" +  (Integer.parseInt (t[1]) - 1) :  Integer.parseInt (t[1]) - 1 + "";
String d3temp1 =  Integer.parseInt (f[2]) - 1 < 10 ? "0" +  (Integer.parseInt (f[2]) - 1) :  Integer.parseInt (f[2]) - 1 +"";
String date3 = t[0] + "-" + d3temp + "-" + d3temp1;

String d4temp = Integer.parseInt (t[1]) - 1 < 10 ? "0" +(Integer.parseInt (t[1]) - 1) :Integer.parseInt (t[1]) - 1 + "";
String d4temp1 = f[2].length () == 1 ? "0" + f[2] : f[2];
String date4 = t[0] + "-" + d4temp + "-" + d4temp1;

calendar.set (Integer.parseInt (f[0]), Integer.parseInt (f[1]) - 1, Integer.parseInt (f[2]));
Date d1 = calendar.getTime ();

calendar.set (Integer.parseInt (t[0]), Integer.parseInt (t[1]) - 2, Integer.parseInt (f[2]) - 1);
Date d3 = calendar.getTime ();

calendar.set (Integer.parseInt (t[0]), Integer.parseInt (t[1]) - 2, Integer.parseInt (f[2]));
Date d4 = calendar.getTime ();

calendar.set (Integer.parseInt (t[0]), Integer.parseInt (t[1]) - 1, Integer.parseInt (t[2]));
Date d2 = calendar.getTime ();

long desc1 = d3.getTime () - d1.getTime ();
long year1 = desc1 / 1000 / 60 / 60 / 24 / 365;
long month1 = desc1 / 1000 / 60 / 60 / 24 / 30 % 12;

long desc2 = d2.getTime () - d4.getTime ();
long day = desc2 / 1000 / 60 / 60 / 24 % 30;

String yearstr = year1 == 0 ? "" : year1 + " 年 ";
System.out.println (date1 + " 到 " + date3 + " 为 " + yearstr + month1 + " 个月," + date4 + " 到 " +  date2 + " 总共有 " + day + " 天,得到 " + year1 + " 年 " + month1 + " 个月 " + day + " 天.");
}

public static void main ( String[] args )
{
calc ("2014-07-20", "2014-11-10");
calc ("2014-07-20", "2015-05-10");
calc ("2014-07-20", "2016-05-10");
}
}

本回答被提问者采纳
相似回答