2010-02-15 29 views
27

Dada una cadena meses, tales como:Convierte Mes cadena a entero en Java

"Feb" 
or 
    "February" 

¿Hay alguna núcleo de Java o funcionalidad biblioteca de terceros que permitirá convertir esta cadena para el número del mes correspondiente en un local ¿Manera agnóstica?

+1

es usted 100% seguro de que la cadena dada siempre será " Feb "y (por ejemplo) no" Φεβ "; – cherouvim

+0

¿Has comprobado las bibliotecas de fecha Joda? – dangerstat

+0

Sí Joda me ha prestado un buen servicio, pero no he podido encontrar nada allí para analizar el número de un mes a otro. @cherouvim: No estoy seguro de entender su significado, gracias – calid

Respuesta

26

Una alternativa al uso de SimpleDateFormat tiempo 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

Usted ha podido analizar el uso de SimpleDateFormat mes:

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); 

Tenga cuidado comparando int month a un int (no lo hace igual a 2!). Lo más seguro es compararlos usando los campos estáticos Calendar (como Calendar.FEBRUARY).

+0

Después de consultar el tiempo joda, es más conciso, robusto y proporciona el número de mes esperado. ¿Hay alguna razón por la cual SimpleDateFormat debería ser preferido? Si no, no veo ninguna razón para no elegir la hora de Joda como respuesta ... gracias – calid

+0

La única ventaja que se me ocurre es que SimpleDateFormat no necesita ningún frasco de terceros. Pero si le da lo mismo, elegiría la funcionalidad (superior) de Joda. –

+0

joda time será efectivamente parte del core java en v8 con JSR 310 –

3

Java 8 solución:

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

usted podría configurar un interruptor DECLARACIÓN, algo como esto (abajo). Estoy poniendo esto en caso de que alguien quiere un simple, fácil de entender solución sé que hubiera querido que antes he escrito esto:

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; 
      }