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

Collection et Stream Java Discussion :

format des dates


Sujet :

Collection et Stream Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 30
    Par défaut format des dates
    bonjour

    Je sais que ca doit être un sujet bateau, mais je ne m'en sors pas avec les dates dans mes JUnits...

    En effet, la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    assertEquals(contrat1.getDateConclusion(), contrat2.getDateConclusion());
    renvoie tjrs l'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    junit.framework.AssertionFailedError: expected:<Thu Mar 29 11:39:22 CEST 2007> but was:<2007-03-29 11:39:22.0>
    J'essai d'y remédier en utilisant SimpleDateFormat etc etc mais tjrs la même erreur.

    Savez-vous où le problème se situe ? Au niveau de la config de la DB ou autre ?

    merci

  2. #2
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Il semble que "contrat.getDateConclusion()" te renvoie un String plutôt qu'une Date, or dans ton cas les 2 String sont des représentations dans des formats différents : convertis chaque String en Date en utilisant pour chacun un SimpleDateFormat différent (ou alors transforme la méthode "contrat.getDateConclusion()" pour quelle te renvoie une Date plutôt qu'un String).

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 30
    Par défaut
    Salut g_rare

    en tout cas pour ce qui est de mon pojo Contrat, il renvoie bien une java.util.Date

    Contrat.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class Contrat{
            import java.util.Date;
     
            (...) 
     
    	public Date getDateConclusion() {
    		return dateConclusion;
    	}
     
            (...)
    }
    Le plus curieux, c'est que même en effectuant une petite manipulation dans ma classe Dao lors du getContractById :

    ContratDaoImpl
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.List;
    (...)
     
    public class ContratDaoImpl implements ContratDao{
    (...)
    	public Contrat getContratById(long id) {
    		CheckTool.checkId(id);
        	        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        	        Contrat contrat = (Contrat) session.load(Contrat.class, id);
     
    		DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
    		try {
    		        contrat.setDateConclusion((format.parse(contrat.getDateConclusion().toString())));   
    		} catch (ParseException e) {
    			e.printStackTrace();
    		}
     
        	        return contrat;
    	}
    (...)
    }
    j'obtiens alors l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    junit.framework.AssertionFailedError: expected:<Fri Mar 30 09:57:08 CEST 2007> but was:<Fri Mar 30 09:57:08 CEST 2007>
    	at junit.framework.Assert.fail(Assert.java:47)
    J'imagine que assertEquals utilise la méthode "equals" de "Object" mais comment faire alors ? Je dois écrire une classe "MaDate extends Date" ? noon

  4. #4
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Citation Envoyé par 60sman
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    junit.framework.AssertionFailedError: expected:<Fri Mar 30 09:57:08 CEST 2007> but was:<Fri Mar 30 09:57:08 CEST 2007>
    	at junit.framework.Assert.fail(Assert.java:47)
    Il se peut que tes 2 dates diffèrent uniquement sur le nombre de millisecondes (non affiché dans ton pattern de SimpleDateFormat) : donc fait un essai avec le "getTime" de chaque Date histoire de vérifier que le nombre de millisecondes est strictement identique.

    Citation Envoyé par 60sman
    J'imagine que assertEquals utilise la méthode "equals" de "Object" mais comment faire alors ?
    La méthode "assertEquals" utilise la méthode "equals" de la classe de son premier paramètre, et la méthode "equals" de la classe Date compare les résultats d'un appel à "getTime".


  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 30
    Par défaut
    salut !

    tu as raison, lorsque je génère la date, j'ai le nombre de millisecondes qui est à

    et ce qui est curieux, c'est que dès que la date est passée au DAO, elle perd ses millisecondes apparement

    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
    	public Contrat getContratById(long id) {
    		CheckTool.checkId(id);
    		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    		Contrat contrat = (Contrat) session.load(Contrat.class, id);
     
    		System.out.println("avant : " + contrat.getDateConclusion().
     
    		DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
    		try {
    								contrat.setDateConclusion((format.parse(contrat.getDateConclusion().toString())));
    		} catch (ParseException e) {
    			e.printStackTrace();
    		}
     
    		System.out.println("apres : " + contrat.getDateConclusion().getTime());
     
    		return contrat;
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    avant : 1175271933000
    apres : 1175271933000
    je vais quand même pas faire un cast à la barbare si ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 30
    Par défaut
    vous croyez que je dois manuellement trafiquer cette date en retirant les millisecondes ?

  7. #7
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    Manuellement non , mais en utilisant un SimpleDateFormat.

    @+


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 30
    Par défaut
    faudrait que je travaille avec SimpleDateFormat dans mon DAO et dans la classe test ?

    y'aurait pas une méthode pour "arrondir" ma Date plutot ?

  9. #9
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Citation Envoyé par 60sman
    y'aurait pas une méthode pour "arrondir" ma Date plutot ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    long avecMillisecondes = new Date().getTime();
    long sansMillisecondes = ( avecMillisecondes / 1000 ) * 1000;

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 30
    Par défaut
    lol, c'est pas un peu bourrain ca ?

    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
    19
    20
    21
    	public void testSaveContrat1(){//simple save
    		Session session1 = HibernateUtil.getSessionFactory().getCurrentSession();
    		session1.beginTransaction();
            
    		Contrat contrat1 = new Contrat();
    		contrat1.setDateConclusion(new Date());
    		
    		long idContrat1 = contratDao.saveContrat(contrat1);
    		
    		session1.getTransaction().commit();
    		
    		Session session2 = HibernateUtil.getSessionFactory().getCurrentSession();
    		session2.beginTransaction();
            
    		Contrat contrat2 = contratDao.getContratById(idContrat1);
    				
    		contrat1.setDateConclusion(new Date((long) (contrat1.getDateConclusion().getTime() / 1000 ) * 1000));
    		
    		assertEquals((Date) contrat1.getDateConclusion(), (Date) contrat2.getDateConclusion());
    	}
    n'empêche, ca marche

Discussions similaires

  1. Format des dates pour acces à une BD MS Access..
    Par hagler dans le forum Bases de données
    Réponses: 10
    Dernier message: 03/10/2005, 18h16
  2. [Debutant] Format des dates ?
    Par Invité dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/09/2005, 14h55
  3. [VBA] Pb de format des dates dans un état
    Par linda15975 dans le forum IHM
    Réponses: 45
    Dernier message: 21/06/2005, 14h49
  4. Format des dates
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 03/05/2005, 11h03
  5. [C#] Format des dates pour une ComboBox...
    Par frechy dans le forum Windows Forms
    Réponses: 5
    Dernier message: 07/01/2005, 17h08

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