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 :

Problème String/Date


Sujet :

Collection et Stream Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 53
    Par défaut Problème String/Date
    bonjour,

    dans mon application, je récupère une string qui représente une date.

    Je voudrai afficher le mois en lettre et toujours en anglais.
    Donc je récupère le numéro de mon mois à partir de ma string mais ensuite ...

    Voilà ce que j'ai fait :
    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
     
    		StringBuffer month = new StringBuffer();
    		FieldPosition fp = new FieldPosition(DateFormat.MONTH_FIELD);
    		NumberFormat formatter = new DecimalFormat("00");
    		DateFormat df = DateFormat.getDateInstance(DateFormat.LONG);
     
    		// Get the year and the month in a number format
    		Accounting_Year = Accounting_Period.substring(0, 4);
    		Curr_Month_Id = Accounting_Period.substring(4, 6);
     
    		// Creating date type object to get month in letter format
    		Calendar myAccCal = new GregorianCalendar(new Integer(Accounting_Year).intValue(), new Integer(Curr_Month_Id).intValue(), Calendar.DAY_OF_MONTH);
    		df.format((Object)myAccCal.getTime(), month, fp); 
    		Acc_Curr_Month = month.substring(fp.getBeginIndex(), fp.getEndIndex()).toString();
    		// First letter UpperCase
    		Acc_Curr_Month = Acc_Curr_Month.substring(0,1).toUpperCase() + Acc_Curr_Month.substring(1, Acc_Curr_Month.length());
    Le problème est qu'après avoir formatter ma date (myAccCal), j'ai avancé d'un mois !?!, par exemple je récupère 'Décembre' alors que le numéro de mon mois est '11'

    Pour la langue comment préciser Locale.US une fois que l'on créer son GregorianCalendar ?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 94
    Par défaut
    bonsoir,
    tu as surement un soucis d'indice 1 à 12 et 0 à 11 ailleurs ...
    ily a surement une fonction setLocale(...) ...
    A+

  3. #3
    Membre expérimenté Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Par défaut
    'soir,
    Parfois, il ne faut pas se compliquer la vie. La liste des mois est fixe, tu veux TOUJOURS les valeurs dans une même langue.

    Voilà un truc qui marche :
    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
    package com.vprod.test.profiler;
     
     
    public class TestDateFormater {
     
    	private final String [] monthsList = {"Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"};
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		new TestDateFormater();
     
    	}
     
    	public TestDateFormater() {
    			String dateAsString = "12/11/2005";
    			String monthAsString = dateAsString.substring(3, 5);
    			int monthAsInt = Integer.parseInt(monthAsString)-1;
    			System.err.println(monthsList[monthAsInt] );
    	}
     
    }

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 53
    Par défaut
    Citation Envoyé par jcodeunpeu
    bonsoir,
    tu as surement un soucis d'indice 1 à 12 et 0 à 11 ailleurs ...
    ily a surement une fonction setLocale(...) ...
    A+
    je pensais que je travaillais avec des mois pas avec des indices ... je vais regarder quand même

    Citation Envoyé par vincent63
    'soir,
    Parfois, il ne faut pas se compliquer la vie. La liste des mois est fixe, tu veux TOUJOURS les valeurs dans une même langue.

    Voilà un truc qui marche :
    C'est ce que je finirais par faire, mais pour ma 'culture' (informatique) personnelle j'aurais bien aimé apprendre comment faire ou savoir ce qui ne fonctionne pas dans mon code ...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 53
    Par défaut
    Je continue mes tests et je ne comprends toujours pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // Je crée un object calendar à la date du 20 aout 2005
    Calendar myAccCal = new GregorianCalendar(2005, 8, 20);
    // Je fais un getTime pour obtenir un objet 'Date' (obligatoire pour utiliser la fonction DateFormat.format)
    myAccCal.getTime();
    --> Le getTime me donne le '20 septembre 2005' !?!

    quelqu'un sait pourquoi ? et si c'est normal ?

  6. #6
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    C'est normal, avec Calendar, les mois sont numéroté de 0 ( janvier ) à 11 ( décembre ).
    la valeur 8 dans le constructeur correspond donc au 9ème mois ( il faut prendre en compte le 0 ) --> Septembre.
    Pour créer le 20 aout 2005 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Calendar c=new GregorianCalendar(2005,7,20);
    Je te conseille vivement de regarder la javadoc des deux classes citées précédemment.
    Voilà.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    956
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 956
    Par défaut
    Janvier = 0, pas 1.

    Edit : envois simultanés.

  8. #8
    Membre expérimenté Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Par défaut
    'jour,
    Le mieux est d'utiliser les constantes de la class calendar. Exemple :
    qui se trouve être des entiers.

    Petit test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    		System.err.println("JANUARY "+Calendar.JANUARY);
    		System.err.println("FEBRUARY "+Calendar.FEBRUARY);
    		System.err.println("MARCH "+Calendar.MARCH);
    		System.err.println("APRIL "+Calendar.APRIL);
    		System.err.println("MAY "+Calendar.MAY);
    		System.err.println("JUNE "+Calendar.JUNE);
    		System.err.println("JULY "+Calendar.JULY);
    		System.err.println("AUGUST "+Calendar.AUGUST);
    		System.err.println("SEPTEMBER "+Calendar.SEPTEMBER);
    		System.err.println("OCTOBER "+Calendar.OCTOBER);
    		System.err.println("NOVEMBER "+Calendar.NOVEMBER);
    		System.err.println("DECEMBER "+Calendar.DECEMBER);
    Résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    JANUARY 0
    FEBRUARY 1
    MARCH 2
    APRIL 3
    MAY 4
    JUNE 5
    JULY 6
    AUGUST 7
    SEPTEMBER 8
    OCTOBER 9
    NOVEMBER 10
    DECEMBER 11

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2005
    Messages : 53
    Par défaut
    J'ai finalement trouvé ce qui clochait et jcodeunpeu avait raison :

    la classe calendar utiliser des static int pour les mois (entre autre) et leur valeur va effectivement de 0 à 11.

    vive la logique

  10. #10
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414

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

Discussions similaires

  1. String date probléme
    Par souhail72 dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 09/12/2013, 11h18
  2. [Date] Conversion String --> date, problème de format
    Par hannibal.76 dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 15/12/2011, 21h54
  3. Problème String date
    Par couakie dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 05/01/2011, 11h46
  4. Problème de conversion date String --> Date
    Par Jonathan.Harvey dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 08/10/2008, 16h38
  5. Encore un probléme de date avec TADO !
    Par bNoureddine dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/02/2004, 18h22

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