你可以先把这2个值转换为Date格式 在Date中有一个方法getTIme(); 返回值为lang,其实就是这个时间对应的毫秒数 long l=D1.getTime()-D2.getTIme(); int year=l/60*60*24*365; 这个year的整数值基本上就是你想要的 不过这是一个过时的方法,可能还有更好的
String a="31-07-1990",b="01-08-2009"; SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy"); try { Date d1 = sdf.parse(a); Date d2 = sdf.parse(b); long day = (d2.getTime() - d1.getTime()) /(365*24*60*60*1000); System.out.println(day); } catch (ParseException e) { e.printStackTrace(); }
网上很多,根据你的需要稍微修改了修改。import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * @description 日期比较天 月 年 */ public class DateTest { public static void main(String[] args) { String date = "1990-07-31"; DateTest.compareDate(date, "2009-08-01", 0); DateTest.compareDate(date, "2009-08-01", 1); DateTest.compareDate(date, "2009-08-01", 2); }
/** * @param stype 返回值类型 0为多少天,1为多少个月,2为多少年 * @return */ public static int compareDate(String date1,String date2,int stype){ int n = 0;
int years = Integer.parseInt(partDest[2]) - Integer.parseInt(partSource[2]); int months = Integer.parseInt(partDest[0]) - Integer.parseInt(partSource[0]); int days = Integer.parseInt(partDest[1]) - Integer.parseInt(partSource[1]);
int years = Integer.parseInt(partDest[2]) - Integer.parseInt(partSource[2]); int days = Integer.parseInt(partDest[0]) - Integer.parseInt(partSource[0]); int months = Integer.parseInt(partDest[1]) - Integer.parseInt(partSource[1]);
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); Calendar c=Calendar.getInstance(); try{ Date dt1=sdf.parse("1990-07-31"); Date dt2=sdf.parse("2009-08-01");
c.setTime(dt1); int y1=c.get(Calendar.YEAR); int d1=c.get(Calendar.DAY_OF_YEAR);
c.setTime(dt2); int y2=c.get(Calendar.YEAR); int d2=c.get(Calendar.DAY_OF_YEAR);
int ydiff=(y2-y1>1?y2-y1-1:0) +(d2>=d1?1:0);
System.out.println(ydiff);
}catch(Exception ex){ ex.printStackTrace(); }
Date begdt = 1990-07-31; Date enddt = 2009-08-01; int byear = begdt.getYear(); int eyear = enddt.getYear(); enddt.setYear(byear); int result_year=eyear-byear-(enddt<begdt?1:0);
在Date中有一个方法getTIme();
返回值为lang,其实就是这个时间对应的毫秒数
long l=D1.getTime()-D2.getTIme();
int year=l/60*60*24*365;
这个year的整数值基本上就是你想要的
不过这是一个过时的方法,可能还有更好的
SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy");
try {
Date d1 = sdf.parse(a);
Date d2 = sdf.parse(b);
long day = (d2.getTime() - d1.getTime()) /(365*24*60*60*1000);
System.out.println(day);
} catch (ParseException e) {
e.printStackTrace();
}
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date; /**
* @description 日期比较天 月 年
*/ public class DateTest { public static void main(String[] args) {
String date = "1990-07-31";
DateTest.compareDate(date, "2009-08-01", 0);
DateTest.compareDate(date, "2009-08-01", 1);
DateTest.compareDate(date, "2009-08-01", 2);
}
/**
* @param stype 返回值类型 0为多少天,1为多少个月,2为多少年
* @return
*/
public static int compareDate(String date1,String date2,int stype){
int n = 0;
String[] u = {"天","月","年"};
String formatStyle ="yyyy-MM-dd";
DateFormat df = new SimpleDateFormat(formatStyle);
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
try {
c1.setTime(df.parse(date1));
c2.setTime(df.parse(date2));
} catch (Exception e3) {
System.out.println("wrong occured");
}
while (!c1.after(c2)) {
n++;
if(stype==1){
c1.add(Calendar.MONTH, 1);// 比较月份,月份+1
}
else{
c1.add(Calendar.DATE, 1); // 比较天数,日期+1
}
}
n = n-1;
if(stype==2){
int yushu=(int)n%365;
n = yushu==0?(n/365):((n/365)-1);
}
System.out.println(date1+" -- "+date2+" 相差多少"+u[stype]+":"+n);
return n;
}
/**
* 得到当前日期
* @return
*/
public static String getCurrentDate() {
Calendar c = Calendar.getInstance();
Date date = c.getTime();
SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd");
return simple.format(date); }
} 运行结果:
1990-07-31 -- 2009-08-01 相差多少天:6941
1990-07-31 -- 2009-08-01 相差多少月:228
1990-07-31 -- 2009-08-01 相差多少年:18
cl.setTime(dDate);//日期
return cl.get(field);//天数
以系统当前日期为起始日期,计算离目标日期还差几天
public String getDateDiff(String targettime) throws ParseException {
// 得到系统当前的日期
String today = DateFormat.getDateInstance().format(new Date());
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
// 将目标日期设置为毫秒形式
long to = df.parse(targettime).getTime();
// 将起始日期设置为毫秒形式
long from = df.parse(today).getTime();
// 得到相减后的毫秒,除于1000得到秒,除于60得到分钟,再除于60得到小时,除于24得到天数
return to > from ? String.valueOf((to - from) / (1000 * 60 * 60 * 24)) : String
.valueOf((from - to) / (1000 * 60 * 60 * 24));
}
用户给定起始日期,计算离目标日期还差几天
public String getDateDiff(String targettime, String begintime) throws ParseException {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
// 将目标日期设置为毫秒形式
long to = df.parse(targettime).getTime();
// 将起始日期设置为毫秒形式
long from = df.parse(begintime).getTime();
// 得到相减后的毫秒,除于1000得到秒,除于60得到分钟,再除于60得到小时,除于24得到天数
return to > from ? String.valueOf((to - from) / (1000 * 60 * 60 * 24)) : String
.valueOf((from - to) / (1000 * 60 * 60 * 24));
}
{
String dateSource = "31-07-1990";
String dateDest = "01-08-2009";
String[] partSource = dateSource.split("-");
String[] partDest = dateDest.split("-");
int years = Integer.parseInt(partDest[2]) - Integer.parseInt(partSource[2]);
int months = Integer.parseInt(partDest[0]) - Integer.parseInt(partSource[0]);
int days = Integer.parseInt(partDest[1]) - Integer.parseInt(partSource[1]);
if(months > 0)
{
return years -1;
} else if(months < 0)
{
return years;
} else if(months == 0 && days == 0)
{
return years;
} else if(months == 0 && days < 0)
{
return years;
} else
{
return years - 1;
}
}
-----------------------public static int getYears()
{
String dateSource = "31-07-1990";
String dateDest = "01-07-2009";
String[] partSource = dateSource.split("-");
String[] partDest = dateDest.split("-");
int years = Integer.parseInt(partDest[2]) - Integer.parseInt(partSource[2]);
int days = Integer.parseInt(partDest[0]) - Integer.parseInt(partSource[0]);
int months = Integer.parseInt(partDest[1]) - Integer.parseInt(partSource[1]);
System.out.println(months);
System.out.println(days);
if(months > 0)
{
return years -1;
} else if(months < 0)
{
return years;
} else if(months == 0 && days == 0)
{
return years;
} else if(months == 0 && days < 0)
{
return years - 1;
} else
{
return years;
}
}
用这个数据
String bod = "1983-08-03";
DateTest.compareDate(bod, "2009-08-01", 0);
DateTest.compareDate(bod, "2009-08-01", 1);
DateTest.compareDate(bod, "1984-08-03", 2); 这个得出的结果是1983-08-03 -- 2009-08-01 相差多少天:9495
1983-08-03 -- 2009-08-01 相差多少月:311
1983-08-03 -- 1984-08-04 相差多少年:0
Calendar c=Calendar.getInstance();
try{
Date dt1=sdf.parse("1990-07-31");
Date dt2=sdf.parse("2009-08-01");
c.setTime(dt1);
int y1=c.get(Calendar.YEAR);
int d1=c.get(Calendar.DAY_OF_YEAR);
c.setTime(dt2);
int y2=c.get(Calendar.YEAR);
int d2=c.get(Calendar.DAY_OF_YEAR);
int ydiff=(y2-y1>1?y2-y1-1:0)
+(d2>=d1?1:0);
System.out.println(ydiff);
}catch(Exception ex){
ex.printStackTrace();
}
Date enddt = 2009-08-01;
int byear = begdt.getYear();
int eyear = enddt.getYear();
enddt.setYear(byear);
int result_year=eyear-byear-(enddt<begdt?1:0);
String date = "1990-07-31";
compareDate(date, "2009-07-30", 0);
compareDate(date, "2009-07-30", 1);
compareDate(date, "2009-07-30", 2);
}
/**
* @param stype 返回值类型 0为多少天,1为多少个月,2为多少年
* @return
*/
public static int compareDate(String date1,String date2,int stype){
int n = 0;
String[] u = {"天","月","年"};
String formatStyle ="yyyy-MM-dd";
DateFormat df = new SimpleDateFormat(formatStyle);
Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
try {
c1.setTime(df.parse(date1));
c2.setTime(df.parse(date2));
} catch (Exception e3) {
System.out.println("wrong occured");
}
while (!c1.after(c2)) {
n++;
if(stype==1){
c1.add(Calendar.MONTH, 1);// 比较月份,月份+1
}
else if (stype==0){
c1.add(Calendar.DATE, 1); // 比较天数,日期+1
}
else if(stype==2){
c1.add(Calendar.YEAR, 1);
}
}
n = n-1;
System.out.println(date1+" -- "+date2+" 相差多少"+u[stype]+":"+n);
return n;
}