-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;
}
}
爲什麼你會im年齡JDK方法將有一個自定義類的構造函數Calendar Cal = new GregorianCalendar(dateBd);'? –
而不是使用陳舊的方法計算兩個日期之間的差異,使用Java 8的Timer API或JodaTime,它提供了開箱即用的支持 - 更準確地說,然後簡單地嘗試計算兩次毫秒之差 – MadProgrammer
@ScaryWombat,因爲im有點遲鈍..謝謝 –