2013-11-01 12 views
7

Привет, я пытаюсь сравнить введенную пользователем дату (как строку) с текущей датой, чтобы узнать, была ли эта дата более ранней или более старой.Сравнение даты ввода пользователя с текущей датой

Мой текущий код

String date; 
Date newDate; 
Date todayDate, myDate;  
SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MM-yyyy"); 

while(true) 
{ 
    Scanner s = new Scanner (System.in); 
    date = s.nextLine(); 
    Calendar cal = Calendar.getInstance(); 
    try { 
     // trying to parse current date here 
     // newDate = dateFormatter.parse(cal.getTime().toString()); //throws exception 

     // trying to parse inputted date here 
     myDate = dateFormatter.parse(date); //no exception 
    } catch (ParseException e) { 
     e.printStackTrace(System.out); 
    } 

} 

Im пытается получить как пользователя дату ввода и текущую дату в двух Дата объектов, так что я могу использовать Date.compareTo(), чтобы упростить сравнение дат.

Мне удалось разобрать входную строку пользователя в объект Date. Однако текущая дата cal.getTime(). ToString() не анализирует объект Date из-за недопустимой строки.

Как это сделать? Заранее спасибо

+0

Просто уточнить - вам нужно что-то, что вернет 'true', если введенная дата вчера, но' false', если введенная дата сегодня. Это правильно? –

+0

Да, это то, что я пытаюсь сделать. Предположим, что im запускает программу сегодня, newDate = new Date(); дает мне (1 ноября 2013 года 8 вечера), и если пользователь вводит 1 ноября 2013 года, он должен вернуть значение false, поскольку введенная дата сегодня (независимо от времени). – kype

ответ

6

Вы можете получить текущий Date с:

todayDate = new Date(); 

EDIT: Так как вам нужно сравнить даты без учета компонента времени, я рекомендую вам посмотреть это: How to compare two Dates without the time portion?

Несмотря на «бедная форма» из одного ответа, я на самом деле очень нравлюсь:

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); 
sdf.format(date1).equals(sdf.format(date2)); 

В вашем случае, у вас уже есть:

SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MM-yyyy"); 

, так что я хотел бы рассмотреть (для простоты, а не исполнение):

todayDate = dateFormatter.parse(dateFormatter.format(new Date())); 
+0

Спасибо. Будет ли это хранить текущую информацию о времени в дату тоже? – kype

+0

Да, это будет, что вы можете удалить, если вам нужно. – rolfl

+0

Я должен положить его в каландр, чтобы изменить время? Поскольку Date.setHour был обесценен – kype

0

появляются две не выполняет, как вы ожидаете.

Calendar cal = Calendar.getInstance(); 
     System.out.println(cal.getTime().toString()); 

выход: Пт 1 ноября 13:46:52 EET 2013

1

Вы можете сделать это.

// Make a Calendar whose DATE part is some time yesterday. 
Calendar cal = Calendar.getInstance(); 
cal.roll(Calendar.DATE, -1); 

if (myDate.before(cal.getTime())) { 
    // myDate must be yesterday or earlier 
} else { 
    // myDate must be today or later 
} 

Это не важно, что cal имеет временную составляющую, потому что myDate не делает. Поэтому, когда вы их сравниваете, если cal и myDate - это одна и та же дата, компонент времени будет составлять cal позже, чем myDate, независимо от того, что представляет собой компонент времени.

+0

Err, который не должен работать правильно, потому что Date.before() принимает дату как аргумент, а не объект календаря – kype

+0

Извините. Исправлено. –

1

Создание новой даты() даст вам объект Date с текущей датой.

так:

Date currentDate = new Date(); 

сделает работу

3

Вот код, чтобы проверить, если данная дата-время больше, то Present метод Date-time.Below принимает perticular даты и времени строку как аргумент и возвращает true если предоставлено дата-время больше, чем настоящая дата-время.#thmarsh

private boolean isExpire(String date){ 
    if(date.isEmpty() || date.trim().equals("")){ 
     return false; 
    }else{ 
      SimpleDateFormat sdf = new SimpleDateFormat("MMM-dd-yyyy hh:mm:ss a"); // Jan-20-2015 1:30:55 PM 
       Date d=null; 
       Date d1=null; 
      String today= getToday("MMM-dd-yyyy hh:mm:ss a"); 
      try { 
       //System.out.println("expdate>> "+date); 
       //System.out.println("today>> "+today+"\n\n"); 
       d = sdf.parse(date); 
       d1 = sdf.parse(today); 
       if(d1.compareTo(d) <0){// not expired 
        return false; 
       }else if(d.compareTo(d1)==0){// both date are same 
          if(d.getTime() < d1.getTime()){// not expired 
           return false; 
          }else if(d.getTime() == d1.getTime()){//expired 
           return true; 
          }else{//expired 
           return true; 
          } 
       }else{//expired 
        return true; 
       } 
      } catch (ParseException e) { 
       e.printStackTrace();      
       return false; 
      } 
    } 
} 


    public static String getToday(String format){ 
    Date date = new Date(); 
    return new SimpleDateFormat(format).format(date); 
} 
Смежные вопросы