java.util.Date vs java.sql.Date

java.util.Date vs java.sql.Date

**

1. Vue d'ensemble

Dans ce tutoriel, nous allons comparer deux classes de dates:java.util.Date etjava.sql.Date.

Une fois la comparaison terminée, vous devez savoir lequel utiliser et pourquoi.

2. java.util.Date

The java.util.Date class represents a particular moment in time, with millisecond precision since the 1st of January 1970 00:00:00 GMT (the epoch time). La classe est utilisée pour conserver le temps universel coordonné (UTC).

Nous pouvons l'initialiser de deux manières.

En appelant le constructeur:

Date date = new Date();

qui créera un nouvel objetdate avec le temps réglé sur l'heure actuelle, mesurée à la milliseconde près.

Ou en passant un certain nombre de millisecondes depuis l'époque:

long timestamp = 1532516399000; // 25 July 2018 10:59:59 UTC
Date date = new Date(timestamp);

Notons que les autres constructeurs, présents avant Java 8, sont désormais obsolètes.

Cependant,Date has a number of issues and overall its usage isn’t recommended anymore.

C'est mutable. Une fois que nous l'initialisons, nous pouvons changer sa valeur interne. Par exemple, nous pouvons appeler la méthodesetTime:

date.setTime(0); // 01 January 1970 00:00:00

Pour en savoir plus sur les avantages des objets immuables, consultez cet article:Immutable Objects in Java.

Il ne gère pas non plus très bien toutes les dates. Techniquement, il devrait refléter le temps universel coordonné (UTC). Cependant, cela dépend du système d'exploitation de l'environnement hôte.

La plupart des systèmes d'exploitation modernes utilisent 1 jour = 24h x 60m x 60s = 86400 secondes, ce qui, comme nous pouvons le voir, ne prend pas en compte la «seconde intercalaire».

With the introduction of Java 8, java.time package should be used. Avant Java 8, une solution alternative était disponible -Joda Time.

3. java.sql.Date

Lejava.sql.Date étend la classejava.util.Date.

Son but principal est de représenter SQL DATE, qui conserve des années, des mois et des jours. Aucune donnée temporelle n'est conservée.

En fait, la date est stockée en millisecondes depuis le 1er janvier 1970 à 00:00:00 GMT et la partie heure est normalisée, c'est-à-dire mis à zéro.

En gros, c'est un wrapper autour dejava.util.Date qui gère les exigences spécifiques à SQL. java.sql.Date ne doit être utilisé que lorsqu'il s'agit de bases de données.

Cependant, commejava.sql.Date ne contient pas d'informations sur le fuseau horaire, la conversion du fuseau horaire entre notre environnement local et le serveur de base de données dépend d'une implémentation du pilote JDBC. Cela ajoute un autre niveau de complexité.

Enfin, notons que pour prendre en charge d'autres types de données SQL: SQL TIME et SQL TIMESTAMP, deux autres classesjava.sql sont disponibles:Time etTimestamp.

Ce dernier, même s'il s'étend à partir dejava.util.Date, supporte les nanosecondes.

4. Conclusion

La classejava.util.Date stocke une valeur date-heure en millisecondes depuis l'époque. java.sql.Date stocke une valeur de date uniquement et est couramment utilisé dans JDBC.

La manipulation des dates est délicate. Nous devons nous rappeler des cas particuliers: secondes intercalaires, fuseaux horaires différents, etc. En traitant avec JDBC, nous pouvons utiliserjava.sql.Date avec prudence.

Si nous voulons utiliserjava.util.Date,, nous devons nous souvenir de ses lacunes. Si vous utilisez Java 8, mieux vaut ne pas utiliser du toutjava.util.Date.

**