我不知道如何让我的代码工作。现在我正在
错误:没有为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;
}
}
答案 0 :(得分:-1)
这样做只能在几年内出生:
public static int getAge(SimpleDate dateBd, SimpleDate dateRef) {
return dateRef.getYear() - dateBd.getYear();
}
您也可以这样做,以毫秒为单位获得完整的年龄,然后用它做你想做的事:
public static long getAge(SimpleDate dateBd, SimpleDate dateRef) {
Calendar c = Calendar.getInstance();
c.set(dateBd.getYear(), dateBd.getMonth(), dateBd.getDay()); //Note: 0 is for January
long birth = c.getTimeInMillis();
c.set(dateRef.getYear(), dateRef.getMonth(), dateRef.getDay());
long ref = c.getTimeInMillis();
return ref - birth;
}
编辑:您还应该考虑使用java内置的库,例如Date:https://docs.oracle.com/javase/8/docs/api/java/util/Date.html