2012-05-16 3 views
0

La date est sélectionnée par l'utilisateur en utilisant une liste déroulante pour l'année, le mois et le jour. Je dois comparer la date entrée par l'utilisateur avec la date du jour. Essentiellement voir si elles sont la même date. Par exemple l'utilisateur est entré le 16/02/2012. Et si aujourd'hui est 16/02/2012 alors je dois afficher un message. Comment fait-on ça? J'ai essayé d'utiliser des millisecondes mais cela donne de mauvais résultats.Comparez la même date en utilisant java

+1

Qu'en est-il de la méthode Date.equals? –

+5

presque toutes vos questions précédentes ont des réponses correctes, vous devriez les accepter :) Pour celui-ci, nous avons vraiment besoin de voir le code que vous utilisez pour convertir la chaîne en une date à partir de laquelle commencer. – Affe

Répondre

0
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
      Date date1 = sdf.parse("2012-05-17"); 
      Date date2 = sdf.parse("2012-01-01"); 

      System.out.println(sdf.format(date1)); 
      System.out.println(sdf.format(date2)); 

      if(date1.compareTo(date2)>0){ 
       System.out.println("Date1 is after Date2"); 
      }else if(date1.compareTo(date2)<0){ 
       System.out.println("Date1 is before Date2"); 
      }else if(date1.compareTo(date2)==0){ 
       System.out.println("Date1 is equal to Date2"); 
      } 

ou

 if(date1.equals(date2)){ 
     System.out.println("Date1 is equal Date2"); 
    } 

Découvrez How to Compare dates

0

Et quel genre d'objet êtes-vous de retour? Chaîne, Calendrier, Date? Vous pouvez obtenir cette chaîne et la comparer, au moins que vous pensez que vous aurez des problèmes avec l'ordre AAAA MM DD /// JJ MM AAAA dans ce cas, je suggère de créer une chaîne personnalisée basée sur votre spécification YYYYMMDD, puis les comparer.

Date d1 = new Date(); 
    Date d2 = new Date(); 

    String day1 = d1.getYear()+"/"+d1.getMonth()+"/"+d1.getDate(); 
    String day2 = d2.getYear()+"/"+d2.getMonth()+"/"+d2.getDate(); 
    if(day1.equals(day2)){ 
     System.out.println("Same day"); 
    } 
0

Les dates dans java sont des moments dans le temps, avec une résolution de "à la milliseconde". Pour comparer efficacement deux dates, vous devez d'abord définir les deux dates en "heures", en minutes, en secondes et en millisecondes. Toutes les méthodes "setTime" dans un java.util.Date sont dépréciées, car elles ne fonctionnent pas correctement pour les problèmes d'internationalisation et de localisation.

« réparer », une nouvelle classe a été introduite GregorianCalendar

GregorianCalendar cal1 = new GregorianCalendar(2012, 11, 17); 
GregorianCalendar cal2 = new GregorianCalendar(2012, 11, 17); 
return cal1.equals(cal2); // will return true 

La raison pour laquelle travaille GregorianCalendar est liée à l'heure, minutes, secondes et millisecondes étant initialisés à zéro dans l'année, le mois, constructeur du jour. Vous pouvez essayer de l'approximer avec java.util.Date en utilisant déprécié méthodes comme setHours(0); cependant, finalement cela échouera en raison d'un manque de setMillis(0). Cela signifie que pour utiliser le format Date, vous devez saisir les millisecondes et effectuer des calculs mathématiques entiers pour définir les millisecondes sur zéro.

date1.setHours(0); 
date1.setMinutes(0); 
date1.setSeconds(0); 
date1.setTime((date1.getTime()/1000L) * 1000L); 
date2.setHours(0); 
date2.setMinutes(0); 
date2.setSeconds(0); 
date2.setTime((date2.getTime()/1000L) * 1000L); 
return date1.equals(date2); // now should do a calendar date only match 

Faites-moi confiance, il suffit d'utiliser la classe Calendrier/GregorianCalendar, il est la voie à suivre (jusqu'à Java adopte quelque chose de plus sophistiqué, comme le temps de Joda.

0

Il y a deux façons vous pouvez le faire. Première est forme à la fois la date en même format de date ou gérer la date sous forme de chaîne.

 SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 
     String date1 = sdf.format(selectedDate); 
     String date2 = sdf.format(compareDate); 
     if(date1.equals(date2)){ 
     }else{ 
     } 

ou

Calendar toDate = Calendar.getInstance(); 
    Calendar nowDate = Calendar.getInstance(); 
    toDate.set(<set-year>,<set-month>,<set-date->); 
    if(!toDate.before(nowDate)) 
    //display your report 
    else 
    // don't display the report 
0

Les réponses ci-dessus sont correctes mais pensez à utiliser JodaTime - son API beaucoup plus simple et intuitive. Vous pouvez définir DateTime en utilisant les méthodes with* et les comparer.

Regardez ce answer

Questions connexes