2012-11-18 4 views
1

J'ai trouvé un problème dans comparer deux types de données variables - type> java.sql.Date.comparer deux types de date variables en Java

Tout d'abord je suis createing les données actuelles (aaaa-mm-jj):

java.util.Date date = new java.util.Date(); 

java.sql.Date dateSql = new Date(date.getTime()); 

Secoundly, im réception de données de MySQL:

MyDataEntity myDataEntity = session.getNamedQuery(MyDataEntity.GET_ELEMENT).uniqueResult(); 

Alors je suis en train de comparer deux dates :

if(dataSql != myDataEntity.getDate()){ 
System.out.println("different"); 
}else{ 
System.out.println("these same"); 
} 

Et l'effet est que ces deux dates sont toujours différentes. Mais quand je suis l'impression des valeurs de ces deux données, j'ai ces mêmes valeurs:

System.out.println(dataSql); 
System.out.println(myDataEntity.getDate); 

Effet:

2012-11-16 
2012-11-16 

Mais, je l'ai trouvé un problème:

si je fais :

long date1 = dateSql.getTime(); // print 1353106800000 
long date2 = myDataEntity.getDate().getTime(); // print 1353234605091 

Alors, comment comparer deux dates (aaaa-mm-jj)?

Répondre

2

Tout d'abord, utilisez .equals(..) pour comparer des objets non primitifs - someDate.equals(anotherDate)

En utilisant == leur identité compare jvm - à savoir si elles sont le même objet sur le tas, plutôt que de leur valeur.

alors assurez-vous de comparer les bonnes choses - vous voulez les mêmes dates, vous devez jeter les heures, les minutes et les jours. Pour cela, vous pouvez utiliser:

  • mathématiques pour soustraire le Millis
  • .set(..) méthodes d » java.util.Calendar.
  • joda temps DateMidnight - meilleure option
0

Ce problème est bien connu: objets java.sql.Date enlever la précision trouvée à l'extrémité inférieure de l'objet de la date (voir tous ces zéros à la fin de votre impression). Vous devez donc normaliser la précision entre vos fichiers java.util.Date et java.sql.Date.

java.util.Date utilDate = new java.util.Date(); 
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime()); 

Oh, et d'utiliser .equals pour comparer des objets, pas ==.