//计算给定日期的若干天后的日期
public MyDate AfterDate(int d)
{
Calendar calendar=Calendar.getInstance();
calendar.set(Year,Month,Day);
calendar.add(Calendar.DAY_OF_MONTH,d);
this.setDate(calendar.YEAR,calendar.MONTH,calendar.DAY_OF_MONTH);
return this;
}这是我定义的一个成员函数,对象通过调用它获得若干天后的日期,可是始终无法获取正确的日期,求解!!
MyDate是我自己定义的,数据成员有Year,Month,Day
public MyDate AfterDate(int d)
{
Calendar calendar=Calendar.getInstance();
calendar.set(Year,Month,Day);
calendar.add(Calendar.DAY_OF_MONTH,d);
this.setDate(calendar.YEAR,calendar.MONTH,calendar.DAY_OF_MONTH);
return this;
}这是我定义的一个成员函数,对象通过调用它获得若干天后的日期,可是始终无法获取正确的日期,求解!!
MyDate是我自己定义的,数据成员有Year,Month,Day
this.setDate(calendar.get(Calendar.YEAR),calender.get(Calendar.MONTH),calender.get(Calendar.DAY_OF_MONTH));
注意Calender.YEAR什么的是常量,要通过get方法来获得相应字段的值
import java.util.Scanner;class MyDate
{
int Year,Month,Day;
MyDate(){}
MyDate(int y,int m,int d)
{
Year=y;
Month=m;
Day=d;
}
MyDate(MyDate date)
{
Year=date.Year;
Month=date.Month;
Day=date.Day;
}
public void setDate(int y,int m,int d)
{
Year=y;
Month=m;
Day=d;
}
public boolean IsDate(){
/*
* 作用:判断所给的年份是否合法
*/
boolean IsDate=false;
if(Year>1970&&Year<3000&&Month>0&&Month<13&&Day>0&&Day<32)
{
switch(Month){
case 1:break;
case 2:
if(!IsLeapYear())//不是闰年
{
if(Day<29)break;else return false;
}
else //闰年
{
if(Day<30)break;else return false;
}
case 3:;
case 5:;
case 7:;
case 8:;
case 10:;
case 12:break;
case 4:;
case 6:;
case 9:;
case 11:if(Day<31)break;else return false;
}
IsDate=true;
}
return IsDate;
}
public boolean IsLeapYear()
{
/*
* 作用:判断是否为闰年
*/
//if(Year>=1970&Year<3000)
{
boolean Leap=false;
Leap=(Year%400==0)||(Year%100!=0)&&(Year%4==0);
return Leap;
}
} //计算任意两日期间的相隔天数
public static long CountDays(MyDate d1,MyDate d2)
{
Calendar calendar=Calendar.getInstance();
calendar.set(d1.Year,d1.Month,d1.Day);
long time1=calendar.getTimeInMillis();
calendar.set(d2.Year,d2.Month,d2.Day);
long time2=calendar.getTimeInMillis();
long 相隔天数 = (time2-time1)/ (1000*60*60*24);
return 相隔天数 ;
}
//计算给定日期的若干天后的日期
public void AfterDate(int d)
{
Calendar calendar=Calendar.getInstance();
calendar.set(Year,Month,Day);
calendar.add(Calendar.DAY_OF_MONTH,d);
this.setDate(calendar.YEAR,calendar.MONTH,calendar.DAY_OF_MONTH);
return this;
/* Day+=d;
switch(Month)
{
case 2:
if(!IsLeapYear())//不是闰年
{
if(Day<29)break;else {Month++;Day-=28;}
}
else //闰年
{
if(Day<30)break;else {Month++;Day-=29;}
}
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if(Day<32)break;else {Month++;Day-=31;}
default:
if(Day<31)break;else {Month++;Day-=30;}
}
if(Month>12){Year++;Month-=12;}
}
*/
}
public class MyDateDemo
{
public static void main(String args[])
{
prt("请输入一个日期(格式:yyyy mm dd):");
Scanner sc=new Scanner(System.in);
int yy=sc.nextInt();
int mm=sc.nextInt();
int dd=sc.nextInt();
MyDate mydate=new MyDate(yy,mm,dd);
prt("此日期是一个正确的日期:"+mydate.IsDate());
prt("输入一给定日期:");
yy=sc.nextInt();
mm=sc.nextInt();
dd=sc.nextInt();
prt("几天后:");
int ad=sc.nextInt();
MyDate datebefore=new MyDate(yy,mm,dd);
datebefore.AfterDate(ad);
prt(ad+"天后是:"+datebefore.Year+'-'+datebefore.Month+'-'+datebefore.Day);
prt("输入两日期(按时间顺序,结构如上):");
int yy1=sc.nextInt();
int mm1=sc.nextInt();
int dd1=sc.nextInt();
int yy2=sc.nextInt();
int mm2=sc.nextInt();
int dd2=sc.nextInt();
MyDate date1=new MyDate(yy1,mm1,dd1);
MyDate date2=new MyDate(yy2,mm2,dd2);
long days=MyDate.CountDays(date1,date2);
prt("两个日期相距"+days+"天");
}
public static void prt(String s)
{
System.out.println(s);
}
}那函数里面注释起来的是我后来自己实现的,问题还是解决不了。
PS.我的成员变量是默认类型,可以直接成员.变量访问