IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

java.util.Date est-il obsolète ?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 37
    Par défaut java.util.Date est-il obsolète ?
    bonjour,

    la classe Date m'est bien utile car c'est celle qui me permet d'exploiter des dates, venant d'une bdd, sans avoir à passer par un converter.
    Seulement, ses methodes getXXX() sont toutes deprecated. Je veux bien accepter le changement, mais j'utilise quoi en attendant ?
    ...la classe Calendar ? ...et après, pour persister en base, je re-cast en Date ?

    J'ai comme l'impression d'être passé à cotés de quelque chose de capital au sujet des dates, mais quoi ?

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    En Java 8, l'API java.time permet de gérer les dates et autres éléments temporels de manières plus simple. Avant, il y avait l'API tierce JodaTime.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    J'aurais tendance à penser que tu es passé à côté de SimpleDateFormat... mais je peux me tromper
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 37
    Par défaut
    merci d'y répondre, joel.
    Par contre, je me sens comme davantage embourbé dans la mélasse
    En réalité, si les méthodes getXXX() fonctionnent encore dans 5 ans, mon problème est résolu ! ...mais la qualification "deprecated" ne me laisse pas serein.
    D'un cotés, j'ai un bean Entity qui me deal du java.util.date ...et il faudrait que je transite par une autre classe pour exploiter les données que contiennent ces dates ?
    Ce n'est pas le passage d'un format à l'autre qui me rebute, mais le fait de n'avoir pas d'autres choix.
    Mon code n'est pas toujours propre, mais là ça fait carrément tâche.

    @ Obutterlin,
    merci je vais regarder ça ...mais je n'y crois plus trop, à vrai dire lol

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    En gros, j'ai l'impression que ton problème c'est la transition, entre l'époque de java.util.Date (et son faux jumeau maléfique Calendar), et l'époque du java.time. Une réflexion à priori partagée par ceux qui sont à l'origine de ce tutoriel. En attendant, la dépréciation n'empêche pas effectivement d'utiliser les méthodes dont tu parles. Je n'y connais rien à ce que tu appelles Entity (je suppose que ça a un rapport avec Hibernate ou un truc comme ça), et je ne perçois pas le problème comme toi : je n'ai simplement jamais utilisé de ma vie les getters de la classe java.sql.Date. Peut-être auras-tu des indices de réponse dans ce tutoriel à ce sujet.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Euh, je ne comprends pas ton problème là...
    Les entity mappent facilement (et automatiquement) une java.sql.Date en java.util.Date... du coup, où est ton problème ?

    Sinon, tu passes d'un type à l'autre très facilement par code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
     
    java.util.Date utilDate = new java.util.Date(sqlDate.getTime());
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2016
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 37
    Par défaut
    pour faire court, joel, je laisse JPA se charger du mapping : il me génère automatiquement mes @Entity à partir de la structure des tables de la bdd.
    Un champ date, dans une des tables, me donne un attribut de type java.util.date dans l'entity qui correspond à cette table.
    Je n'ai aucun contrôle (me semble-t-il) sur la façon dont JPA génère ces entity, et il fait le choix de java.util.date.
    Cette classe date, elle me convient bien, elle fait le taf et tout
    ...mais ses get() sont étiquetés "deprecated" ...et en guise de solution de remplacement, on te propose de te prendre la tête, tout simplement !


    @ Obutterlin
    oui nickel, ça map bien, tranquille ...c'est juste l'étiquetage deprecated qui me pose problème
    ...parce que d'une certaine manière ça m'oblige à passer par un autre format de date pour faire ma cuisine, puis de repasser en util.date si je veux répercuter en base
    Il n'y a que moi qui trouve ça crade ou quoi ? lol

  8. #8
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Il y a peu de chance que les méthodes dépréciées de la classe Date disparaissent, cela casserait trop de code.

    Toutefois cela ne change rien au fait que l'API de la classe Date est toute pourrie !
    Déjà elle n'est pas immuable, ce qui oblige à faire plein de copie défensive sous peine de provoquer des bugs.
    Et elle représente une date au format GMT, mais ses méthodes l'adapte au timezone courant, ce qui peut être troublant dans certains cas.
    Sans compté l'héritage bien particulier de tout cela (java.util.Date parent de sql.Date, sql.Time et sql.Timestamp alors que c'est des notion plutôt différente).
    Et ne parlons même pas de Calendar...


    Tu gagnerais fortement à passer à la nouvelle API de Date !



    Pour JPA apparemment il suffit de définir un convertisseur pour que le mapping soit automatique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class LocalDateAttributeConverter implements AttributeConverter<LocalDate, java.sql.Date> {
     
        @Override
        public java.sql.Date convertToDatabaseColumn(LocalDate localDate) {
        	return (localDate == null ? null : java.sql.Date.valueOf(localDate));
        }
     
        @Override
        public LocalDate convertToEntityAttribute(java.sql.Date sqlDate) {
        	return (sqlDate == null ? null : sqlDate.toLocalDate());
        }
    }

    Idem pour sql.Time/LocalTime et sql.Timestamp/LocalDateTime...


    a++

  9. #9
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par IDtalc Voir le message
    Il n'y a que moi qui trouve ça crade ou quoi ? lol
    Ben, oui

    Blague à part, personnellement, ça ne me pose aucun problème, et je n'utilise aucune méthode @Deprecated (là j'ai du mal à comprendre ce que tu fais si toi tu les utilises)
    Le seul moment où on se pose la question de la représentation d'une date c'est dans l'IHM et là, en fonction de la techno utilisée, ce sera plus ou moins évident. Avec JSF c'est trivial (encore plus avec Primefaces)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Cast de java.util.DATE à java.sql.DATE
    Par mnemonic78 dans le forum Langage
    Réponses: 6
    Dernier message: 05/01/2007, 08h21
  2. Java 5.0 et java.util.Date
    Par Royd938 dans le forum Langage
    Réponses: 4
    Dernier message: 10/07/2006, 12h19
  3. Conflit entre java.util.Date et class java.sql.Date
    Par vonitiana dans le forum Langage
    Réponses: 3
    Dernier message: 30/06/2006, 11h43
  4. de java.sql.Date à java.utile.Date
    Par Sniper37 dans le forum API standards et tierces
    Réponses: 10
    Dernier message: 23/05/2006, 16h10
  5. Réponses: 4
    Dernier message: 06/02/2004, 16h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo