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

API standards et tierces Java Discussion :

formatage de date non pris en compte


Sujet :

API standards et tierces Java

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Par défaut formatage de date non pris en compte
    salut

    je tente d'obtenir un format de date

    yyyy-mm-dd

    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
     
    import java.sql.Date;
    import java.sql.SQLException;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.GregorianCalendar;
    import java.text.ParseException;
     
    public class dateTest{
    	public static void main(String args[])throws Exception{
    		Calendar cal = new GregorianCalendar();
    		int pYear=1;
    		int pMonth=1;
    		int pDay=1;
    		cal.add(Calendar.MONTH,-12);
    		for (int i=0;i<12;i++){
    			cal.add(Calendar.MONTH,+1);
     
    			pYear = cal.get(Calendar.YEAR);
    			pMonth = cal.get(Calendar.MONTH);
    			pDay = cal.get(Calendar.DATE);
     
    			String strDate = Integer.toString(pYear) + "-" +
    			Integer.toString(pMonth) + "-" + Integer.toString(pDay);
    			SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
    			java.util.Date parsedDate = null;
     
    			try {
    				parsedDate = formater.parse(strDate);
    				System.out.println(parsedDate);
    			} catch (ParseException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    }
    mais j'obtiens plutôt


    Sun Nov 27 00:00:00 EST 2005

    au lieux de 2005-11-27

    une idée?

    merci

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    L'objet Date ne contient pas d'informations de formattage. Il contient juste les infos temporelles...
    Si tu veux un formattage particulier il te faudra passer par la méthode format(Date d) de la classe SimpleDateFormat

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Par défaut
    Citation Envoyé par sinok
    L'objet Date ne contient pas d'informations de formattage. Il contient juste les infos temporelles...
    Si tu veux un formattage particulier il te faudra passer par la méthode format(Date d) de la classe SimpleDateFormat
    j'utilise déjà SimpleDateFormat

  4. #4
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Oui mais tu affiche l'ojet Date alors que celui n'est PAS altéré par le SimpleDateFormat.

    Comme l'a dit Sinok, il faut utiliser la méthode format(Date d) de SimpleDateFormat dont le principe est de te renvoyer une chaine de caractère représentant la valeur de ton objet Date dans le format que tu as défini dans le SimpleDateFormat. C'est cette chaîne qu'il faut afficher.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Date d = new Date(); //représente la date du jour
    SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd"); //on défini le SimpleDateFormat qui va bien
    String formattedDate = formater.format(d); //on applique la méthode format de SimpleDateFormat sur la Date, on obtient un objet String
    System.out.println(formattedDate); //on affiche cette String
    Là ça devrait le faire.

    Edit:
    Pour obtenir un objet Date à partir d'un ojet Calendar, tu fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Date d = tonObjetCalendar.getTime();
    Après pour afficher cette Date dans le format que tu veux, tu utilise le SimpleDateFormat comme je te l'ai montré ci dessus.

    C'est quand même beaucoup plus simple que la méthode que tu as employé.

  5. #5
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    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
    public static void main(String args[])throws Exception{
    		Calendar cal = new GregorianCalendar();
    		//int pYear=1;
    		//int pMonth=1;
    		//int pDay=1;
    		cal.add(Calendar.MONTH,-12);
                    // plutot set(Calendar.MONTH,0) non ?
    		for (int i=0;i<12;i++){
    			cal.add(Calendar.MONTH,+1);
                            // à la fin de la boucle plutot. Les mois commencent à 0
     
    			//pYear = cal.get(Calendar.YEAR);
    			//pMonth = cal.get(Calendar.MONTH);
    			//pDay = cal.get(Calendar.DATE);
     
    			//String strDate = Integer.toString(pYear) + "-" +
    			//Integer.toString(pMonth) + "-" + Integer.toString(pDay);
    			SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
    			java.util.Date parsedDate = null;
     
    			try {
    				//parsedDate = formater.parse(strDate);
                                    parsedDate = formater.parse(cal.getTime());
    				System.out.println(parsedDate);
    			} catch (ParseException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    tout simplement, non ?

  6. #6
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Citation Envoyé par in
    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
    public static void main(String args[])throws Exception{
    		Calendar cal = new GregorianCalendar();
    		//int pYear=1;
    		//int pMonth=1;
    		//int pDay=1;
    		cal.add(Calendar.MONTH,-12);
    		for (int i=0;i<12;i++){
    			cal.add(Calendar.MONTH,+1);
     
    			//pYear = cal.get(Calendar.YEAR);
    			//pMonth = cal.get(Calendar.MONTH);
    			//pDay = cal.get(Calendar.DATE);
     
    			//String strDate = Integer.toString(pYear) + "-" +
    			//Integer.toString(pMonth) + "-" + Integer.toString(pDay);
    			SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
    			java.util.Date parsedDate = null;
     
    			try {
    				//parsedDate = formater.parse(strDate);
                                    parsedDate = formater.parse(cal.getTime());
    				System.out.println(parsedDate);
    			} catch (ParseException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    tout simplement, non ?
    Non, tu fais la même erreur que lui, à savoir que tu affiche un objet Date ce qui fait que l'affichage ne sera pas formaté.

    Pour être clair :

    La méthode parse(String) permet d'obtenir un objet Date à partir d'une chaîne de caractère formaté comme dans le SimpleDateFormat.

    La méthode format(Date) fait l'inverse, elle renvoie une chaine de caractère représentant la valeur de l'objet Date dans le format défini dans le SimpleDateFormat. Quand on veut avoir un affichage formaté d'une date, on utilise cette méthode.

  7. #7
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Pour compléter la réponse de Descent : un Date n'est ni plus ni moins que le nombre de milli-seconde depuis le 1 janvier 1970 selon le temps universel coordonné (UTC).

    Ainsi, pour un objet date, et quel que soit la manière dont il a été obtenu, on ne connait que ce nombre de ms, et lorsqu'on l'affiche avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println( date );
    On appelle en réalité la méthode toString() qui utilise ce format spécifique (et un timezone dépendant des préférences systèmes il me semble).


    Si on souhaite modifier la représentation de la date il faut donc utiliser un DateFormat paramétré comme bon nous semble afin de "transformer" l'objet Date en String :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println( formater.format(date) );
    a++

  8. #8
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Citation Envoyé par adiGuba
    Salut,


    Pour compléter la réponse de Descent : un Date n'est ni plus ni moins que le nombre de milli-seconde depuis le 1 janvier 1970 selon le temps universel coordonné (UTC).

    Ainsi, pour un objet date, et quel que soit la manière dont il a été obtenu, on ne connait que ce nombre de ms, et lorsqu'on l'affiche avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println( date );
    On appelle en réalité la méthode toString() qui utilise ce format spécifique (et un timezone dépendant des préférences systèmes il me semble).


    Si on souhaite modifier la représentation de la date il faut donc utiliser un DateFormat paramétré comme bon nous semble afin de "transformer" l'objet Date en String :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println( formater.format(date) );
    a++
    Précisions importantes et claires. Du adiGuba quoi...

  9. #9
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    j'avais pas tilté que le problème était l'affichage ...

  10. #10
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Par défaut
    pour l'insertion d'une date dans une bd (champ de type date), le formatage est t'il important?

  11. #11
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par robert_trudel
    pour l'insertion d'une date dans une bd (champ de type date), le formatage est t'il important?
    Il est préférable de passer par les PreparedStatement et la méthode setDate()...

    a++

  12. #12
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Et ne surtout jamais formatter une date dans une base de données... Le formattage doit être réalisé dans les applications qui utilisent la base juste à but d'affichage
    La base doit contenir un format standard qui ne sera manipulé qu'à partir du getDate/setDate du preparedStatement

  13. #13
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Par défaut
    je génère une date avec le code suivant

    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
     
    Calendar cal = new GregorianCalendar();
    Date datePublication;
    cal.add(Calendar.MONTH,-12);
    datePublication = genererDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), 1);
     
     
    public Date genererDate(int pYear, int pMonth, int pDay){
      String strDate = Integer.toString(pYear) + "-" +  Integer.toString(pMonth) + "-" + Integer.toString(pDay);
      java.util.Date parsedDate = new java.util.Date();
     
      try {
    	parsedDate = new SimpleDateFormat("yyyy-MM-dd").parse(strDate);
      } catch (ParseException e) {
    	e.printStackTrace();
      }	
      return (Date) parsedDate;	
    }
    lors du return j'obtiens
    java.lang.ClassCastException: java.util.Date

    ensuite j'utiliserais datePublication dans une requête sql (select)

  14. #14
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par robert_trudel
    lors du return j'obtiens
    java.lang.ClassCastException: java.util.Date

    ensuite j'utiliserais datePublication dans une requête sql (select)
    Je suppose que tu dois utiliser des java.sql.Date :

    Il suffit donc de créer une nouvelle instance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return new java.sql.Date( parsedDate.getTime() );
    a++

  15. #15
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Par défaut
    lorsque je fais afficher la valeur de la date j'ai:
    une partie de la requête à l'affichage...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... where pub >= 2005-10-01
    erreur obtenu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.sql.SQLException: ORA-00932: inconsistent datatypes: expected DATE got NUMBER

  16. #16
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Utilises un PreparedStatement à la place de ton Statemant avec du setDate, ça ira tout de suite mieux

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

Discussions similaires

  1. [QR 4.05] Propriété imprimante non pris en compte
    Par portu dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 30/09/2008, 14h21
  2. [ASE][SQL]WHERE non pris en compte
    Par Benjamin78 dans le forum Sybase
    Réponses: 1
    Dernier message: 24/03/2006, 12h00
  3. Erreur Date non prise en compte
    Par priest69 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 23/02/2006, 23h46
  4. Accents non pris en compte dans les requêtes SELECT
    Par YanK dans le forum Requêtes
    Réponses: 1
    Dernier message: 30/08/2005, 10h57
  5. [event] keyListener non pris en compte
    Par pierre.zelb dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 03/08/2005, 08h35

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