53 votes

Conversion de java.sql.Date en java.util.Date

Quel est le moyen le plus simple de convertir un objet java.sql.Date en java.util.Date tout en conservant l'horodatage ?

J'ai essayé :

java.util.Date newDate = new Date(result.getDate("VALUEDATE").getTime());

sans succès. Il ne stocke toujours que la partie date dans la variable.

2 votes

Cet héritage est une conception étrange de l'héritage

68voto

x4u Points 7436

La classe java.sql.Date est conçue pour contenir uniquement une date sans heure, de sorte que le résultat de la conversion que vous voyez est correct pour ce type. Vous devez utiliser la classe java.sql.Timestamp pour obtenir une date complète avec l'heure.

java.util.Date newDate = result.getTimestamp("VALUEDATE");

3 votes

Je vais donc essayer ceci : new Date(result.getTimestamp("VALUEDATE").getTime()) ;

1 votes

Cela devrait fonctionner, mais puisque java.sql.Timestamp découle également de java.util.Date vous pourriez tout aussi bien utiliser l'instance Timestamp.

18voto

brianbruff Points 21

Si vous voulez vraiment que le type d'exécution soit util.Date, faites-le :

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

Brian.

0 votes

Cela provoque un NPE !!!!!!!

0 votes

@PlexQ : Cela devrait être le cas si votre sqlDate est null, mais peut-être que quelque chose d'évident m'échappe car vous semblez avoir utilisé beaucoup de points d'exclamation.

9voto

Bala R Points 57552

Depuis java.sql.Date s'étend java.util.Date vous devriez être en mesure de faire

java.util.Date newDate = result.getDate("VALUEDATE");

1 votes

Oui, mais en cours d'exécution, newDate sera toujours une instance de java.sql.Date

0 votes

C'est vrai ce que dit @joeybaruch, et là si vous essayez la méthode .toInstant() vous obtiendrez une UnsopportedMethodException, donc ce n'est pas recommandé

7voto

Tanmay kumar shaw Points 169

Cette fonction renvoie une date java convertie à partir de l'objet date de SQL.

public static java.util.Date convertFromSQLDateToJAVADate(
            java.sql.Date sqlDate) {
        java.util.Date javaDate = null;
        if (sqlDate != null) {
            javaDate = new Date(sqlDate.getTime());
        }
        return javaDate;
    }

4voto

Stephen C Points 255558

D'après le code source, si un java.sql.Date dispose effectivement d'informations temporelles, en appelant getTime() renvoie une valeur qui inclut l'information temporelle.

Si cela ne fonctionne pas, c'est que l'information n'est pas dans la base de données. java.sql.Date objet. Je suppose que les pilotes JDBC ou la base de données mettent (en fait) à zéro la composante temporelle ... ou que l'information n'était pas là au départ.

Je pense que vous devriez utiliser java.sql.Timestamp et les méthodes correspondantes du jeu de résultats, ainsi que le type SQL correspondant.

0 votes

Je fais une requête sur Oracle 10g. J'utilise ojdbc14.jar

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X