2015-04-20 32 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