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

Java Discussion :

Problème avec Date


Sujet :

Java

  1. #1
    Membre averti
    Inscrit en
    Septembre 2004
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 12
    Par défaut Problème avec Date
    J'aimerai insérer une date dans une colonne de type DATETIME à ma base de données.
    Dans mon code java j'ai la variable de type String qui contient :
    dateStr = "11/23/12 3:00:02 PM"
    String dateStr = "11/23/12 3:00:02 PM";
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    Date date = (Date) dateFormat.parse(dateStr);
    String sql= "insert into test (name,date) values ('"+date+"','"+namevar+"')";

    la colonne date dans ma base est de type DATETIME.
    Après l'exécution de mon code j'ai l'erreur suivante :
    The following error accurredjava.text.ParseException: Unparseable date: "11/23/12 3:00:02 PM"
    Merci de votre aide.

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    Utilise un PreparedStatement et la classe Date

    A+.

  3. #3
    Membre averti
    Inscrit en
    Septembre 2004
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 12
    Par défaut
    Merci Andry pour la réponse,
    J'ai changé mon code à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    String dateStr = "11/23/12 3:00:02 PM";
     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");                
     Date date = (Date) dateFormat.parse(dateStr);
     
    String sql = "insert into test (name,date) values(?,?)";
    PreparedStatement  statement= con.prepareStatement(sql);                
    statement.setDate(1, date);
    statement.setString(2,namevar);
     
    statement.executeUpdate();
    Jai toujours la même erreur. par contre je ne comprends pas ce que tu veut dire par utiliser la classe Date???
    Est-ce que tu peux m'éclaircir ??? Merci

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Attention, regarde bien les liens que j'ai donnés, un type java.util.Date est différent de java.sql.Date.

    A+.

  5. #5
    Membre averti
    Inscrit en
    Septembre 2004
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 12
    Par défaut
    Merci pour la piste.
    Bonne journée

  6. #6
    Membre chevronné
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    Mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 238
    Par défaut
    Bonjour
    voici un code qui peut t'arranger

    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
    public static void main(String[] args) {
     
        	String dateStr = "2013-12-02 3:00:02 PM";
     
     
        	DateFormat dateFormat24h = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
        	DateFormat dateFormat12h = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
     
        	try {
    			String dat = dateFormat24h.format(dateFormat12h.parse(dateStr));
     
    			System.out.println(dat);
    		} catch (ParseException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
        }
    Seulement il y'a un souci, si tu veux ce format de date "yy/MM/dd" tu dois aussi l'utiliser dans le SimpleDateFormat
    Et si tu veux le format "yyyy-MM-dd" tu dois respecter cet ordre dans dateStr

    En espérant avoir pu apporter une réponse

  7. #7
    Membre chevronné
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    Mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 238
    Par défaut
    Ah oui autre chose, pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String sql = "insert into test (name,date) values(?,?)";
    PreparedStatement  statement= con.prepareStatement(sql);                
    statement.setString(1, namevar);
    statement.setDate(2,date);
     
    statement.executeUpdate();
    Fait attention à l'ordre des arguments
    Voila
    Ciao

  8. #8
    Membre averti
    Inscrit en
    Septembre 2004
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 12
    Par défaut
    Citation Envoyé par Laine Voir le message
    Bonjour
    voici un code qui peut t'arranger

    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
    public static void main(String[] args) {
     
        	String dateStr = "2013-12-02 3:00:02 PM";
     
     
        	DateFormat dateFormat24h = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
        	DateFormat dateFormat12h = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
     
        	try {
    			String dat = dateFormat24h.format(dateFormat12h.parse(dateStr));
     
    			System.out.println(dat);
    		} catch (ParseException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
        }
    Seulement il y'a un souci, si tu veux ce format de date "yy/MM/dd" tu dois aussi l'utiliser dans le SimpleDateFormat
    Et si tu veux le format "yyyy-MM-dd" tu dois respecter cet ordre dans dateStr

    En espérant avoir pu apporter une réponse
    Je viens de voir ton message aujourd'hui et c'est bien dommage. Je te remercie pour ta réponse bien détaillée.
    Après le message de andry.aime j'ai compris qu'il fallait convertir ma java.util.date à java.sql.Timestamp et j'ai suivi cette piste la.

    J'arrive à insérer mes date dans la base avec en appelant les fonctions suivantes:
    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
     
     public static java.util.Date convertStrToDate(String dateString) {
     
     java.util.Date date = null;
     String sFormat = "MM/dd/yy hh:mm:ss a";
     SimpleDateFormat dateFormat = new SimpleDateFormat(sFormat); //11/23/12                  
     dateFormat.setLenient(true);
     try {
        date = dateFormat.parse(dateString);  // dateString 11/23/12 3:00:02 PM
                                                            //retourne java.util.Date
     
            } catch (ParseException ex) {
               ex.printStackTrace();
            }
             return date;
         }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     public static java.sql.Timestamp convertToSqlDate(java.util.Date utilDate)
    {     
    java.sql.Timestamp sqlDateTime = new java.sql.Timestamp(utilDate.getTime());  //convert java.util.Date au type java.sql.Timestamp
             return sqlDateTime;
         }

  9. #9
    Membre Expert
    Homme Profil pro
    Développeur Java/Scala
    Inscrit en
    Octobre 2007
    Messages
    1 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Scala

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 086
    Par défaut
    A ma connaissance lors de l'insertion, pas la peine d'utiliser les objets de java.sql.

    Tu peux passer une java.util.Date et ca marchera tout aussi bien (pour peu que tu n'aies pas besoin de la précision des nanosecondes).

    Lors du traitement du resultset, en fonction de ta colonne date tu auras en retour un java.sql.Date ou un java.sql.Timestamp, qui sont au final des sous classes de java.util.Date


    Bref perso j'ai jamais eu a me prendre la tête avec les dates du package sql. Fais comme si elles n'existaient pas et ca se passera très bien pour toi dans la grande majorité des cas.

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 579
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 579
    Par défaut
    Citation Envoyé par HerQuLe Voir le message
    A ma connaissance lors de l'insertion, pas la peine d'utiliser les objets de java.sql.

    Tu peux passer une java.util.Date et ca marchera tout aussi bien (pour peu que tu n'aies pas besoin de la précision des nanosecondes).
    Ça ne compile même pas -_-°.

    Citation Envoyé par HerQuLe Voir le message
    Lors du traitement du resultset, en fonction de ta colonne date tu auras en retour un java.sql.Date ou un java.sql.Timestamp
    Non, en fonction de si on demande un Date ou un Timestamp. C'est vrai que ça m'aurait semblé plus malin mais bon, ce qui est, c'est ce qui est.

    Citation Envoyé par HerQuLe Voir le message
    qui sont au final des sous classes de java.util.Date

    Bref perso j'ai jamais eu a me prendre la tête avec les dates du package sql.
    Pour l'insert, pas possible sans un DAO un peu plus intelligent que le JDBC brut. Pour la récupération, oui.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre Expert
    Homme Profil pro
    Développeur Java/Scala
    Inscrit en
    Octobre 2007
    Messages
    1 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Scala

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 086
    Par défaut
    Ah oui en effet...
    C'est surement l'habitude du JdbcTemplate qui me fait dire ça

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

Discussions similaires

  1. [Dates] problème avec date et mktime
    Par gloubi dans le forum Langage
    Réponses: 2
    Dernier message: 07/02/2007, 17h59
  2. [Dates] Problème avec date (heure qui varie)
    Par Death83 dans le forum Langage
    Réponses: 10
    Dernier message: 05/08/2006, 02h19
  3. Problème avec date dans requête
    Par alain94 dans le forum Access
    Réponses: 2
    Dernier message: 22/05/2006, 07h49
  4. Problème avec "Date()" en mode runtime
    Par bwalbourg dans le forum Runtime
    Réponses: 1
    Dernier message: 25/01/2006, 10h51
  5. [MySQL] Problème avec DATE SUB et INTERVAL
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 25/01/2006, 00h36

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