Я хочу, чтобы иметь возможность установить значение моих объектов SimpleDate
на дату, которую я получаю от ввода. В настоящее время я получаю ошибкуИспользовать ввод для установки значения объектов в формате даты
AgeClientFL.java:15: error: incompatible types dateBirth = sdf.parse(month +"+"+ day +"+"+ year); ^ required: SimpleDate found: Date 1 error
Как я это исправить, и еще что-нибудь не так?
import java.text.*;
import java.util.Date;
public class AgeClientFL {
public static void main(String [] args){
int month, day, year;
SimpleDateFormat sdf = new SimpleDateFormat(month+"+"+day+"+"+year);
day = UtilsFL.readInt("Enter birth day: ",false); // String mode
month = UtilsFL.readInt("Enter birth month: ",false);
year = UtilsFL.readInt("Enter birth year: ",false);
SimpleDate dateBirth = new SimpleDate();
dateBirth = sdf.parse(month +"+"+ day +"+"+ year);
day = UtilsFL.readInt("Enter todays day: ",true); // JOptionPane mode
month = UtilsFL.readInt("Enter todays month: ",true);
year = UtilsFL.readInt("Enter todays year: ",true);
SimpleDate dateToday = new SimpleDate();
SimpleDate milestone = new SimpleDate();
}
}
Вот мой файл класса 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;
}
}
'SimpleDateFormat # parse' возвращает экземпляр' java.util.Date' (при условии, что значение и шаблон совпадают). 'SimpleDate' и' java.util.Date' несовместимы друг с другом – MadProgrammer
Вы проверили javadoc SimpleDateFormat? https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html. Кажется, что вы инициализировали экземпляр SimpleDateFormat с неправильным параметром. – Thinhbk
В вашем случае, почему бы просто не передать значения 'month',' day', 'year' непосредственно в класс' SimpleDate'? – MadProgrammer