Comparer objet Date avec un TimeStamp en Java

Quand je l'ai tester ce code:

java.util.Date date = new java.util.Date();
java.util.Date stamp = new java.sql.Timestamp(date.getTime());

assertTrue(date.equals(stamp));
assertTrue(date.compareTo(stamp) == 0);
assertTrue(stamp.compareTo(date) == 0);
assertTrue(stamp.equals(date));

Mal-être attendre un vrai, vrai, vrai, faux. De ce fait:

Dans la javadoc de java.sql.Timestamp, il indique:

Remarque: Ce type est un composite de java.util.Date et un autre
nanosecondes valeur. Seulement partie intégrante secondes sont stockés dans le
java.util.Composant de Date. Les fractions de secondes - les nanos - sont
séparé. L'Horodatage.equals(Object) méthode ne retourne vrai lorsque
passé d'une valeur de type java.util.Date parce que les nanos composant d'un
la date est inconnue. En conséquence, l'Horodatage.equals(Object) la méthode est
pas symétrique par rapport à la java.util.Date.equals(Object)
la méthode. Aussi, la méthode hashcode utilise le sous-jacent de java.util.Date
la mise en œuvre et n'inclut donc pas les nanos dans son
le calcul.

En raison des différences entre le Timestamp de la classe et de l'
java.util.Classe Date mentionnée ci-dessus, il est recommandé que le code n'
affichage des valeurs d'Horodatage génériquement comme une instance de java.util.Date.
La relation d'héritage entre l'Horodatage et la java.util.Date
vraiment désigne la mise en œuvre de l'héritage, et non pas le type d'héritage.

Mais plutôt Mauvais obtenir un true, false, true, false. Des idées?

EDIT: Ce problème apparaît lorsque je vérifiais les deux Dates avec la méthode equals, mais celui de l'objet Date viennent de Hibernate classe et de débogage je vois que l'objet contient un Horodatage. Donc, la méthode equals à false, alors j'ai trouvé ceci: http://mattfleming.com/node/141

Mais quand j'ai essayer le code que j'obtiens des résultats différents...si je ne peux utiliser ni d'égal à égal et compareTo, ce que je doit utiliser pour vérifier si les 2 Dates sont les mêmes?!?!

  • En gros: si vous voulez comparer deux homogène des objets (soit la Date ou Timestamp), il n'y a pas de problème; il ne faut pas comparer deux objets hétéroclites. Nous pouvons essayer de résoudre le problème à la source, le sens: pourquoi avez-vous comparer?
  • Im la comparaison de deux objets Date, mais l'objet implicite dans l'un d'eux est un TimeStamp est un type de Date. Si l'héritage fonctionne dans un autre objet, pourquoi pas ici?
  • Parce que la mise en œuvre de Timestamp est stupide; vous devez traiter ces deux classes comme n'étant pas liés, tout comme l'intention de celui qui l'a écrit.
InformationsquelleAutor Torres | 2012-01-19