//计算给定日期的若干天后的日期
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

解决方案 »

  1.   

    //this.setDate(calendar.YEAR,calendar.MONTH,calendar.DAY_OF_MONTH);
    this.setDate(calendar.get(Calendar.YEAR),calender.get(Calendar.MONTH),calender.get(Calendar.DAY_OF_MONTH));
    注意Calender.YEAR什么的是常量,要通过get方法来获得相应字段的值
      

  2.   

    import java.util.Calendar;
    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.我的成员变量是默认类型,可以直接成员.变量访问