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

avec Java Discussion :

problème de conversion de dates


Sujet :

avec Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 50
    Points : 46
    Points
    46
    Par défaut problème de conversion de dates
    Bonjour à tous !

    J'ai un petit problème avec les dates...
    J'ai un programme qui se connecte et récupère des dates via JDBC (elles s'affichent au format aaaa-mm-jj... Je préférerais jj/mm/aaaa mais ça viendra après).
    Je veux pouvoir aussi créer un objet dans lequel j'utilise les date. J'ai donc une fenêtre qui s'ouvre, avec entre autre un JFormattedTextField que j'ai fait pour les dates :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    package modele;
     
    import javax.swing.*;
    import java.text.SimpleDateFormat;
    import java.time.LocalDate;
     
    public class DateTextField extends JFormattedTextField {
        public DateTextField() {
            super(new SimpleDateFormat("dd/MM/yyyy"));
        }
        public DateTextField(LocalDate d) {
            super(new SimpleDateFormat("dd/MM/yyyy"));
            this.setValue(d);
        }
        public LocalDate getDateValue() {
            return (LocalDate)this.getValue();
        }
    }
    Or, quand je valide le formulaire pour créer l'objet, j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.base/java.util.Date cannot be cast to java.base/java.time.LocalDate
    	at modele.DateTextField.getDateValue(DateTextField.java:16)
    	at vue.PopupOperation.okButton(PopupOperation.java:111)
    	at controleur.OkListener.actionPerformed(OkListener.java:16)
    	at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
    ...
    Je crois comprendre que c'est le DateTextField et en particulier la méthode getDateValue() qui pose problème.
    Quand je modifie en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public LocalDate getDateValue() {
            return ((Date)this.getValue()).toLocalDate();
        }
    J'ai cette fois-ci l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.base/java.util.Date cannot be cast to java.sql/java.sql.Date
    Comment faire pour que mon TextField renvoie une date ?

    Merci d'avance de vos éclairages

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Le composant Swing JFormattedTextField ne fonctionne qu'avec les formats de date (DateFormat, SimpleDateFormat...) pour les classes java.util.Date et étendant celle-ci, comme java.sql.Date, utilisée par JDBC pour représenter les dates. Tu peux utiliser directement les java.sql.Date, mais le composant pouvant créer des instances, le composant pourra contenir aussi des instances de java.util.Date.

    Le package java.time arrivé bien plus tard, avec la classe LocalDate, n'est pas "compatible" avec ces anciennes classes (il n'y a pas de lien de généralisation ou spécialisation). Si tu veux passer par des LocalDate, il faut convertir les LocalDate en java.util.Date, ou plus précisément en java.sql.Date pour avoir une instance utilisable avec JFormattedTextFIeld et JDBC.

    Pour convertir une LocalDate en java.sql.Date, on peut directement utiliser la méthode java.sql.Date.valueOf(java.time.LocalDate).
    Pour faire l'inverse, utiliser la méthode java.sql.Date.toLocalDate().

    Attention, si une instance de java.sql.Date est une instance de java.util.Date parce que la première classe étend la seconde, l'inverse n'est pas (forcément) vrai. Si un objet est du type java.util.Date, il n'est pas forcément castable en java.sql.Date parce qu'il n'est pas forcément une instance de cette classe. L'erreur que tu obtiens donc dans le code suivant est probablement due au fait que l'instance stockée dans le field est une java.util.Date, donc pas castable vers une java.sql.Date.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public LocalDate getDateValue() {
            return ((Date)this.getValue()).toLocalDate();
     
     
        }
    Il faut donc prendre en compte que la date contenue dans le composant peut être une instance de java.util.Date.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public LocalDate getDateValue() {
            Object value = this.getValue();
            if ( value instanceof Date ) {// ici java.sql.Date à cause de l'import 
                return ((Date)value).toLocalDate();
            }
             else  if ( value instanceof java.util.Date ) {
                 ZonedDateTime zdt = ZonedDateTime.ofInstant ( ((java.util.Date )value).toInstant(), ZoneId.systemDefault() );
                 return  zdt.toLocalDate();
             }
             else {
                  return null; // ou ce que tu veux dans ce cas, une date par défaut par exemple, ou une autre interprétation de la valeur...
             }
        }
    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
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 50
    Points : 46
    Points
    46
    Par défaut
    Merci, la solution fonctionne à merveille
    Problème résolu !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème de conversion de date
    Par thaundeadboss dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 11/06/2008, 07h07
  2. Problème de conversion de date en C#
    Par Xitog dans le forum Framework .NET
    Réponses: 9
    Dernier message: 10/09/2007, 14h11
  3. Problème de conversion de date
    Par loulou dans le forum Langage
    Réponses: 1
    Dernier message: 29/08/2007, 15h18
  4. [T-SQL] Problème de conversions de dates
    Par kooljy dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/06/2006, 14h19
  5. - [CAST ou CONVERT] Problème de conversion de date
    Par Boublou dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/07/2004, 14h31

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