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 :

[Date] Comparer des dates au format mySQL "date


Sujet :

Collection et Stream Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 34
    Points : 34
    Points
    34
    Par défaut [Date] Comparer des dates au format mySQL "date
    Glop,

    Dans le cadre d'une application web, je collecte, entre-autre, deux dates avec heure. Afin que ces dates puissent être insérée dans une base de données, un jeu de JavaScript impose à l'utilisateur de renseigner une date et une heure sous la forme aaaa-mm-jj hh:mm:ss.
    Or, avant d'insérer ces données dans la base, j'ai besoin de m'assurer qu'elles vérifient une règle d'antériorité. La date A doit être antérieure à la date B.
    Voici comment je procède actuellement:
    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
     
    		(...)
    		// on vérifie le bon ordonancement chronologique des dates
    		Date A_date = new Date();
    		Date B_date = new Date();
    		Date A_time = new Date();
    		Date B_time = new Date();
     
    		StringTokenizer strTkn = new StringTokenizer(date_A);
    		String A_date_str = strTkn.nextToken();
    		String A_time_str = strTkn.nextToken();
    		strTkn = new java.util.StringTokenizer(date_B);
    		String B_date_str = strTkn.nextToken();
    		String B_time_str = strTkn.nextToken();
     
    		A_date = java.sql.Date.valueOf(A_date_str);
    		B_date = java.sql.Date.valueOf(B_date_str);
    		A_time = java.sql.Time.valueOf(A_time_str);
    		B_time = java.sql.Time.valueOf(B_time_str);
     
    		// si la date A n'est pas inférieure à la seconde prêt à la date B, on a une erreur
    		if (
    				( B_date.equals(A_date) && B_time.before(A_time ) ) ||
    				( B_date.before(A_date) )
    			){
    			erreurs.add("saisie",new ActionError("saisie.erreur.chronologie"));
    		}
    		(...)
    Je trouve particulièrement crados ce que j'ai fait, mais je ne vois pas trop comment procéder autrement. Des idées?

  2. #2
    Nouveau membre du Club
    Inscrit en
    Juillet 2004
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 48
    Points : 34
    Points
    34
    Par défaut
    Pourquoi tu n'utilise pas la classe SimpleDateFormat pour transformer tes dates en java.util.Date et les comparées avec < !?

  3. #3
    Membre éclairé
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Points : 844
    Points
    844
    Par défaut
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
     
    package ******;
     
     
    import java.text.*;
    import java.util.*;
    import java.io.*;
     
    /** Parse une chaine aaaa-mm-dd hh:mm:ss en objet java Date **/
    public abstract class DateParser
    {
        /** Le formatteur **/
        private static DateFormat format = init();
     
        /** Initialisation du formatteur **/
        private static DateFormat init()
        { DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
          format.setLenient(false);
          return format;
        }
     
        /** Conversion de la chaine en objet Date 
         *   @param txtDate Chaine au format aaaa-mm-dd hh:mm:ss a convertir
         *   @return Date correspondant (null si erreur de saisie)
         **/
        public static Date convert(String txtDate)
        {
     
            ParsePosition pos = new ParsePosition(0);
     
            Date date = format.parse(txtDate,pos);
            if( pos.getErrorIndex() != -1 || pos.getIndex() != txtDate.length() )  return null;
     
            return date;
        }
    }
    pour faire ta comparaison un code ressemblant a ca peut être utilisé :

    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
    String txtDate1 = "2004-24-12 21:00:00";
    String txtDate2 = "2003-24-12 19:57:11";
     
    Date date1 = DateParser.convert(txtDate1);
    Date date2 = DateParser.convert(txtDate2);
    if( date1 == null || date2 == null)
    { System.err.println("Une des deux dates mal saisies");
       return;
    }
    if( date2 >= date1)
    { System.err.println("La deuxieme date n'est pas inferieur à la 1ere");
       return;
    }
    ....
    ....

  4. #4
    Nouveau membre du Club
    Inscrit en
    Février 2004
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 34
    Points : 34
    Points
    34
    Par défaut
    Citation Envoyé par djskyz
    Pourquoi tu n'utilise pas la classe SimpleDateFormat pour transformer tes dates en java.util.Date et les comparées avec < !?
    Peut-être parce que je manque de sommeil ou de caféïne et qu'on est lundi.. :-D

    merci.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-d HH:mm:ss");
    Date DateA = sdf.parse(date_A);
    Date DateB = sdf.parse(date_B);
    if (DateB.before(DateA)){
     erreurs.add("saisie",new ActionError("saisie.erreur.chronologie"));
    }

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

Discussions similaires

  1. [Dates] Affichage des images d'un dossier - avec date
    Par Axtrane dans le forum Langage
    Réponses: 12
    Dernier message: 10/03/2007, 21h12
  2. Comparer des Dates (Access, jdbc)
    Par babylone7 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/07/2005, 10h01
  3. Comparaison de 2 dates dans des formats différents
    Par frdek dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/02/2005, 15h05
  4. comparer des champs date time
    Par HULK dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 25/01/2005, 14h02
  5. [date] Comparer deux formats différents
    Par terziann dans le forum Requêtes
    Réponses: 17
    Dernier message: 21/07/2003, 15h21

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