2010-02-15 3 views
27

d'une chaîne de mois tels que:Convertir mois Chaîne à Integer en Java

"Feb" 
or 
    "February" 

Y at-il noyau Java ou la fonctionnalité de bibliothèque tierce partie qui vous permettra de convertir cette chaîne au nombre de mois correspondant dans un lieu façon agnostique?

+1

êtes-vous sûr à 100% que la chaîne donnée sera toujours " Fév "et (par exemple) pas" Φεβ "; – cherouvim

+0

Avez-vous vérifié les bibliothèques de date de Joda? – dangerstat

+0

Oui Joda m'a bien servi, mais n'a rien trouvé pour analyser une chaîne de mois en mois. @cherouvim: Je ne suis pas sûr que je prends votre sens, grâce – calid

Répondre

26

Une alternative à l'utilisation du temps SimpleDateFormat Joda:

import org.joda.time.DateTime; 
    import org.joda.time.format.DateTimeFormat; 
    import org.joda.time.format.DateTimeFormatter; 
    ... 

    // if default locale is ok simply omit '.withLocale(...)' 
    DateTimeFormatter format = DateTimeFormat.forPattern("MMM"); 
    DateTime instance  = format.withLocale(Locale.FRENCH).parseDateTime("août"); 

    int month_number   = instance.getMonthOfYear(); 
    String month_text  = instance.monthOfYear().getAsText(Locale.ENGLISH); 

    System.out.println("Month Number: " + month_number); 
    System.out.println("Month Text: " + month_text ); 

    OUTPUT: 
     Month Number: 8 
     Month Text: August 
41

Vous pouvez analyser le mois en utilisant SimpleDateFormat:

Date date = new SimpleDateFormat("MMM", Locale.ENGLISH).parse("Feb"); 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(date); 
    int month = cal.get(Calendar.MONTH); 
    System.out.println(month == Calendar.FEBRUARY); 

Attention à comparer int month à un int (il ne pas égale 2!). Est de les plus sûrs de comparer l'utilisation des champs statiques de Calendar »(comme Calendar.FEBRUARY).

+0

Ayant regardé l'heure joda, elle est plus concise, robuste et donne le nombre de mois attendu. Y a-t-il une raison pour laquelle SimpleDateFormat devrait être préféré? Sinon, je ne vois aucune raison pourquoi ne pas choisir le temps Joda comme la réponse ... merci – calid

+0

Le seul avantage que je peux penser est que le SimpleDateFormat n'a pas besoin de pot 3ème partie. Mais si c'est la même chose pour vous, j'opterais pour la fonctionnalité (supérieure) de Joda. –

+0

temps Joda sera effectivement partie de java de base en v8 avec JSR 310 –

3

solution Java 8:

DateTimeFormatter parser = DateTimeFormatter.ofPattern("MMM") 
              .withLocale(Locale.ENGLISH); 
TemporalAccessor accessor = parser.parse("Feb"); 
System.out.println(accessor.get(ChronoField.MONTH_OF_YEAR)); // prints 2 
0

vous pouvez simplement mettre en place un statment de commutation, quelque chose comme ça (ci-dessous). Je poste ce au cas où quelqu'un veut simple, facile à comprendre la solution Je sais que je l'aurais voulu avant que je ne tapiez cette place:

switch(input2) { 
      case "january": 
      case "jan": 
       input2 = "1"; 
      break; 

      case "febuary": 
      case "feb": 
       input2 = "2"; 
      break; 

      case "march": 
      case "mar": 
       input2 = "3"; 
      break; 

      case "april": 
      case "apr": 
       input2 = "4"; 
      break; 

      case "may": 
       input2 = "5"; 
      break; 

      case "june": 
      case "jun": 
       input2 = "6"; 
      break; 

      case "july": 
      case "jul": 
       input2 = "7"; 
      break; 

      case "august": 
      case "aug": 
       input2 = "8"; 
      break; 

      case "september": 
      case "sep": 
      case "sept": 
       input2 = "9"; 
      break; 

      case "october": 
      case "oct": 
       input2 = "10"; 
      break; 

      case "november": 
      case "nov": 
       input2 = "11"; 
      break; 

      case "december": 
      case "dec": 
       input2 = "12"; 
      break; 
      }