Проверка двух дат на андроид студии
Мне нужно проверить дату 2, одна выбирается пользователем, а другая - та, которую я получаю из календаря... это то, что я пытаюсь до сих пор безуспешно:
Calendar c = Calendar.getInstance();
if(!DateIsOlder(txtVwAppointmentDate.getText(), c.getTime())) {
try {
//My code
}
public static boolean DateIsOlder(CharSequence date1, Date date2){
//SimpleDateFormat Date2 = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz -HH:mm yyyy", Locale.ENGLISH);
SimpleDateFormat dfDate = new SimpleDateFormat("dd/mm/yyyy", Locale.ENGLISH);
boolean isOlder = false;
try{
//Date newDate = (Date)Date2.parse(date2);
if(dfDate.parse(String.valueOf(date1)).before(dfDate.format(date2))){
isOlder = true;
}
else if (dfDate.parse(String.valueOf(date1)).equals(dfDate.format(date2))){
isOlder = false;
}
else {
isOlder = false;
}
}catch (Exception e){
e.printStackTrace();
}
return isOlder;
}
Ошибка на.before(dfDate.format(date2)), она говорит: Ошибка:(484, 51) error: метод перед в классе Date не может быть применен к данным типам; обязательно: дата найдена: причина строки: фактический аргумент Строка не может быть преобразована в дату путем преобразования вызова метода
и если вы можете видеть, с другой стороны, если я сравниваю обе даты, если они равны, и компилятор не показывает какую-либо ошибку в этой строке:
else if (dfDate.parse(String.valueOf(date1)).equals(dfDate.format(date2)))
Кроме того, я пытаюсь изменить его на дату, но безуспешно... Любая идея, чтобы помочь мне решить эту проблему? Благодарю.
4 ответа
Ваша проблема в том, что dfDate.format(date2) возвращает объект String, а не объект Date, поэтому вам нужно изменить метод yout на:
public static boolean DateIsOlder(CharSequence date1, Date date2){
SimpleDateFormat dfDate = new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH);
boolean isOlder = false;
try{
if(dfDate.parse(String.valueOf(date1)).before(dfDate.parse(dfDate.format(date2)))){
isOlder = true;
}
else {
isOlder = false;
}
}catch (Exception e){
e.printStackTrace();
}
return isOlder;
}
Не используйте java.util.Date. Google говорит следующее о дате:
Устаревшая функциональность этого класса, связанная с отображением, теперь предоставляется DateFormat, а устаревшая вычислительная функциональность этого класса теперь предоставляется Calendar.
Другими словами, это устарело. Вы должны использовать DateFormat, о котором вы можете прочитать больше здесь: http://developer.android.com/reference/java/text/DateFormat.html
Для сравнения дат вам нужно создать два разных объекта Calendar и вызвать до () или после ()
Вы просто можете преобразовать дату пользователей в метку времени и сравнить их.
DateFormat formatter = new SimpleDateFormat("MM-dd-yyyy");
Date date = (Date)formatter.parse(str_date);
Timestamp timeStamp = new TimeStamp(date);
Что ж, спасибо всем, кто помогает мне найти решение, я пытаюсь найти простой способ, и он работает, мне не нужна вся информация calendar.getTime, поэтому я делаю следующее:
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1;
int day = c.get(Calendar.DAY_OF_MONTH);
if(!DateIsOlder(txtVwAppointmentDate.getText(), month + "/" + day + "/" + year)) {
try { //my code }
public static boolean DateIsOlder(CharSequence date1, String date2){
SimpleDateFormat dfDate = new SimpleDateFormat("MM/dd/yyyy");
boolean isOlder = false;
try{
//Date newDate = (Date)Date2.parse(date2);
if(dfDate.parse(String.valueOf(date1)).before(dfDate.parse(date2))){
isOlder = true;
}
else {
isOlder = false;
}
}catch (Exception e){
e.printStackTrace();
}
return isOlder;
}
и работает без проблем! спасибо вам всем:)