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

Développement Web en Java Discussion :

Problème format Date


Sujet :

Développement Web en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Par défaut Problème format Date
    Bonjour,

    j'ai un soucis de formatage de date, j'aimerais avoir pour retour, un format suivant : jj/mm/aaaa 00:00:00. Tels que c'est stocké dans ma base de donnée en Date TIME.
    Pouvez vous m'aider ?

    Seconde question : comment je peux faire dans ma jsp pour verifier que le premier champ : dateDebutComparaison et bien Inférieur à dateFinComparaison. (dateDebut et dateFin sont des champs de saisi afin de pouvoir faire un comparaison qui, elle se fait dans ma requête mysql) .

    J'ai fait cette methode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private static Date getValeurChampDate( HttpServletRequest request, String nomChamp ) throws ParseException {
    		String valeur = request.getParameter( nomChamp );
    		DateFormat formater = DateFormat.getDateInstance(DateFormat.SHORT,Locale.FRANCE);
     
    		Date date = formater.parse(valeur);
    		if ( valeur == null || valeur.trim().length() == 0 ) {
    			return null;
    		} else {
     
    			System.out.println("date retournée : "+date);
    			return date;
    		}
    	}
    et j'obtiens par exemple ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    date retournée : Thu May 02 00:00:00 CEST 2013
    date retournée : Sat May 04 00:00:00 CEST 2013

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2011
    Messages : 196
    Par défaut
    Tu peux utiliser la classe SimpleDateFormat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SimpleDateFormat formater = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
    formater.format(valeur)

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Par défaut
    Bonjour,

    Utilise ce code :

    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
     
    private static Date getValeurChampDate( HttpServletRequest request, String nomChamp ) throws ParseException {
    	String dateString = request.getParameter( nomChamp );
            SimpleDateFormat dateFormatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss", Locale.FRANCE);
     
            Date dateConvertie;
            if (valeur != null && valeur.trim().length() != 0)
            {
                    dateConvertie = sdf.parse(dateString);
            }
            else
            {
                dateConvertie = null;
            }
     
            return dateConvertie;
        }
    Le tient était assez exotique... Tu formates la date, puis tu vérifies ensuite si le String d'origine est null ou vide... Pour améliorer ça il faudrait que tu gardes en mémoire l'instance de "dateFormatter" car c'est dommage de reconstruire le formateur à chaque fois...

    Seconde question : comment je peux faire dans ma jsp pour verifier que le premier champ : dateDebutComparaison et bien Inférieur à dateFinComparaison. (dateDebut et dateFin sont des champs de saisi afin de pouvoir faire un comparaison qui, elle se fait dans ma requête mysql) .
    Comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dateDebutComparaison.before(dateFinComparaison)
    Romain.

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Par défaut
    Merci les gars.

    J'ai une erreur avec ton code romain, j'ai peut etre fait encore une bourde...

    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
    java.text.ParseException: Unparseable date: "02/05/2013"
    connection établie base SQL
    	at java.text.DateFormat.parse(DateFormat.java:354)
    	at org.omega.forms.RechercheMaterielForm.getValeurChampDate(RechercheMaterielForm.java:188)
    	at org.omega.forms.RechercheMaterielForm.rechercheListMateriels(RechercheMaterielForm.java:81)
    	at org.omega.servlets.AfficheMateriels.doPost(AfficheMateriels.java:76)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    	at org.omega.filters.RestrictionFilter.doFilter(RestrictionFilter.java:47)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
    	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
    	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    	at java.lang.Thread.run(Thread.java:679)
    Voici le code en fonction de ton exemple :
    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
    	private static Date getValeurChampDate( HttpServletRequest request, String nomChamp ) throws ParseException {
    		String dateString = request.getParameter( nomChamp );
    		SimpleDateFormat dateFormatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss", Locale.FRANCE);
     
    		Date dateConvertie;
    		if (dateString != null && dateString.trim().length() != 0)
    		{
    			dateConvertie = dateFormatter.parse(dateString);
    		}
    		else
    		{
    			dateConvertie = null;
    		}
    		System.out.println("date retournée : "+dateConvertie);
    		return dateConvertie;
    	}

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Par défaut
    Voilà :

    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
    private static Date getValeurChampDate( HttpServletRequest request, String nomChamp ) throws ParseException {
    		String dateString = request.getParameter( nomChamp );
    		SimpleDateFormat dateFormatter = new SimpleDateFormat("dd/MM/yyyy", Locale.FRANCE);
     
    		Date dateConvertie;
    		if (dateString != null && dateString.trim().length() != 0)
    		{
    			dateConvertie = dateFormatter.parse(dateString);
    		}
    		else
    		{
    			dateConvertie = null;
    		}
    		System.out.println("date retournée : "+dateConvertie);
    		return dateConvertie;
    	}
    Le format que tu mets dans le simpledateformat doit correspondre au format du string saisie dans ton formulaire.

    Romain.

  6. #6
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Bonjour,
    Quand on a affaire à de telles conversions sensibles, le mieux c'est de protéger son code par un try catch :
    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
     
    /**
             * Parse une date en fonction du format passé en paramètre
             * 
             * @param dateToParse :Date en Chaine
             * @param dateFormat   : format de la date vers laquelle parser
             *          
             * @return
             */
    	public static Date parseDate(String dateToParse, String dateFormat) {
    		SimpleDateFormat df = new SimpleDateFormat(dateFormat);
    		Date dateParse = null;
    		try {
    			dateParse = df.parse(dateToParse);
    		} catch (ParseException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();// Ou return null
    		}
    		return dateParse;
    	}
    Et pour la comparaison des Dates, tu peux la faire côté client en Javascript, qui comprend tout à fait l'opérateur de comparaison (<, >,<=,etc...)

  7. #7
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Par défaut
    Quand je fais ton code :

    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
    private static Date getValeurChampDate( HttpServletRequest request, String nomChamp ) throws ParseException {
    		String dateString = request.getParameter( nomChamp );
    		SimpleDateFormat dateFormatter = new SimpleDateFormat("dd/MM/yyyy", Locale.FRANCE);
     
    		Date dateConvertie;
    		if (dateString != null && dateString.trim().length() != 0)
    		{
    			dateConvertie = dateFormatter.parse(dateString);
    		}
    		else
    		{
    			dateConvertie = null;
    		}
    		System.out.println("date retournée : "+dateConvertie);
    		return dateConvertie;
    	}
    J'obtiens ça en console :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    date retournée : Thu May 02 00:00:00 CEST 2013
    date retournée : Sat May 11 00:00:00 CEST 2013
    et ça dans le navigateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Etat HTTP 500 - com.microsoft.sqlserver.jdbc.SQLServerException: Échec de la conversion d'une valeur datetime à partir d'une chaîne de caractères.

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Par défaut
    Pourquoi ne mets-tu pas l'instanciation de ton objet dateFormatter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SimpleDateFormat dateFormatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss", Locale.FRANCE);
    dans la méthode "init" de ta servlet?

    Il serait créé une seule fois, alors que là, tu le recrées à chaque appel de ta méthode.

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

Discussions similaires

  1. Problème format date
    Par benjisan dans le forum Modélisation
    Réponses: 3
    Dernier message: 17/07/2008, 09h24
  2. Problème Format date
    Par Jiyuu dans le forum VB.NET
    Réponses: 5
    Dernier message: 21/08/2007, 16h52
  3. problème format date dans un datagrid
    Par bebert119 dans le forum ASP.NET
    Réponses: 11
    Dernier message: 14/08/2007, 15h38
  4. Problème format Date avec VS2003
    Par vaohdan dans le forum Windows Forms
    Réponses: 1
    Dernier message: 07/05/2007, 12h06
  5. Problème format date - SimpleDateFormat inversion mois/jour
    Par juanqui dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 07/02/2007, 14h37

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