2015-04-20 33 views
-1

我不知道如何让我的代码工作。现在即时得到从两个日期查找年龄的修复方法算法

error: no suitable constructor found for GregorianCalendar(SimpleDate)

如何解决这个问题,让我getAge方法,从两个日期计算年龄的人?这里的代码。

import java.util.GregorianCalendar; 
import java.util.Date; 
import javax.swing.JOptionPane; 
import java.util.Scanner; 
import java.util.Calendar;  

public class UtilsFL { 


    public static int readInt(String prompt,boolean guiFlag) { 

     if (guiFlag==false){ 
     Scanner input = new Scanner(System.in); 
     int data; 


     System.out.print(prompt); 
     data = input.nextInt(); 

     return data; 
     } 
     else if (guiFlag==true) { 
     int data; 
     data = Integer.parseInt(JOptionPane.showInputDialog(prompt)); 
     } 
     return 0; 

     }  




    public static SimpleDate today() { 


     Calendar todayCal = Calendar.getInstance(); 
     SimpleDate todayDate = new SimpleDate(); 


     todayDate.setDate(todayCal.get(Calendar.MONTH) + 1, 
          todayCal.get(Calendar.DATE), 
          todayCal.get(Calendar.YEAR)); 
     return todayDate; 
    } 



    public static int getAge(SimpleDate dateBd) { 
     int age; 
     SimpleDate dateToday = today(); 


     age = getAge(dateBd, dateToday); 
     return age; 

    } 




    public static int getAge(SimpleDate dateBd, SimpleDate dateRef) { 
     Calendar cal = new GregorianCalendar (dateBd); 
     Calendar now = new GregorianCalendar(); 
     int rAge = now.get(Calendar.YEAR) - cal.get(Calendar.YEAR); 
    if((cal.get(Calendar.MONTH) > now.get(Calendar.MONTH) 
     || (cal.get(Calendar.MONTH) == now.get(Calendar.MONTH) 
     && cal.get(Calendar.DAY_OF_MONTH) > now.get(Calendar.DAY_OF_MONTH)))) 
    { 
     res--; 
    } 

     return -1; 


    } 

} 

这里是我的SimpleDate类的代码。

import java.io.Serializable;  // for object I/O to file 

//public class SimpleDate 
public class SimpleDate implements Serializable 

{ 
    private int month; 
    private int day; 
    private int year; 

    /** default constructor 
    * sets month to 1, day to 1 and year to 2000 
    */ 
    public SimpleDate() 
    { 
    setDate(1, 1, 2000); 
    } 

    /** overloaded constructor 
    * @param mm initial value for month 
    * @param dd initial value for day 
    * @param yyyy initial value for year 
    * 
    * passes parameters to set methods 
    */ 
    public SimpleDate(int mm, int dd, int yyyy) 
    { 
    setMonth(mm); 
    setYear(yyyy); 
    setDay(dd); 
    } 

    /* accessor methods */ 
    int getMonth() { return month; } 
    int getDay() { return day; } 
    int getYear() { return year; } 

    /** mutator method */ 
    /** setMonth 
    * @param mm new value for month 
    * if mm is between 1 and 12, sets month to mm 
    * otherwise, sets month to 1 
    */ 
    public void setMonth(int mm) 
    { 
    month = (mm >= 1 && mm <= 12 ? mm : 1); 
    } 

    /** setDay 
    * @param dd new value for day 
    * if dd is legal day for current month, sets day to dd 
    * otherwise, sets day to 1 
    */ 
    public void setDay(int dd) 
    { 
    day = (dd >= 1 && isValidDay(dd) ? dd : 1); 
    } 

    /** setYear 
    * @param yyyy new value for year 
    * sets year to yyyy 
    */ 
    public void setYear(int yyyy) 
    { 
    year = yyyy; 
    } 

    /** sets date to the next day 
    */ 
    public void nextDay() 
    { 
    if (! isValidDay(++day)) 
    { 
     day = 1; 
     if (++month > 12) 
     { 
      month = 1; 
      year++; 
     } 
    } 
    } 

    private boolean isValidDay(int newDay) 
    { 
    int [] daysInMonth = { 0, 31, 28, 31, 
           30, 31, 30, 
           31, 31, 30, 
           31, 30, 31 }; 

    if (newDay > daysInMonth[month]) 
    { 
     if (month == 2 && isLeapYear() && newDay == 29) 
      return true; 
     else 
      return false; 
    } 
    else 
     return true; 

    } 

    private boolean isLeapYear() 
    { 
    return !(year % 4 != 0 
       ||(year % 100 == 0 && year % 400 != 0)); 
    } 


    /** setDate 
    * @param mm new value for month 
    * @param dd new value for day 
    * @param yyyy new value for year 
    * passes parameters to setMonth, setDay, and setYear 
    */ 
    public void setDate(int mm, int dd, int yyyy) 
    { 
    setYear(yyyy); // set year first (could be leap year) 
    setMonth(mm); // set month next 
    setDay(dd);  // set day 
    } 

    /** toString 
    * @return String 
    * returns date in mm/dd/yyyy format 
    */ 
    public String toString() 
    { 
    return month + "/" + day + "/" + year; 
    } 

    /** equals 
    * @param d Object to compare to this object 
    * @return true if d is equal to this object 
    *   false, otherwise 
    */ 
    public boolean equals(Object d) 
    { 
    if (!(d instanceof SimpleDate)) 
     return false; 
    SimpleDate d1 = (SimpleDate)d; 
    if (month == d1.month 
     && day == d1.day 
     && year == d1.year) 
     return true; 
    else 
     return false; 
    } 
} 
+4

为什么你会im年龄JDK方法将有一个自定义类的构造函数Calendar Cal = new GregorianCalendar(dateBd);'? –

+0

而不是使用陈旧的方法计算两个日期之间的差异,使用Java 8的Timer API或JodaTime,它提供了开箱即用的支持 - 更准确地说,然后简单地尝试计算两次毫秒之差 – MadProgrammer

+1

@ScaryWombat,因为im有点迟钝..谢谢 –

回答

-1

这样做是为了让他们的出生仅年:

public static int getAge(SimpleDate dateBd, SimpleDate dateRef) { 
      return dateRef.getYear() - dateBd.getYear(); 
    } 

你也可以这样做是为了得到他们的充分年龄以毫秒为单位,然后做你想要做什么用:

​​

编辑:你也应该考虑使用java内置的库,如日期:https://docs.oracle.com/javase/8/docs/api/java/util/Date.html