2010-02-15 5 views
27

Учитывая месяц строки, такие как:Преобразование месяца строки в Integer в Java

"Feb" 
or 
    "February" 

Есть ли ядро ​​Java или функциональность библиотеки третьей стороны, которая позволит вам преобразовать эту строку в соответствующем номер месяца в локали агностический путь?

+1

ты 100% уверен, что данная строка всегда будет " Feb "и (например) не" Φεβ "; – cherouvim

+0

Вы проверили библиотеки даты Джоды? – dangerstat

+0

Да, Джода хорошо меня зарекомендовал, но ничего не мог найти для разбора месячной строки на месяц. @cherouvim: Я не уверен, что понимаю ваше значение, спасибо – calid

ответ

26

Альтернативой 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

можно разобрать месяц с помощью 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); 

Будьте осторожны, сравнивая int month с междунар (он делает не равный 2!). Safest должен сравнивать их с использованием статических полей Calendar (например, Calendar.FEBRUARY).

+0

Изучив время joda, оно более кратким, надежным и дает ожидаемый месячный номер. Есть ли причина, почему SimpleDateFormat должен быть предпочтительнее? Если нет, я не вижу причин, почему бы не выбрать время Джоды в качестве ответа ... спасибо – calid

+0

Единственное преимущество, о котором я могу думать, это то, что SimpleDateFormat не нуждается в стороннем банке. Но если вам все равно, я бы пошел на (превосходную) функциональность Джоды. –

+0

Время joda будет эффективно быть частью ядра java в v8 с JSR 310 –

3

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

вы можете просто настроить переключающий Постулаты, что-то вроде этого (ниже). Я отправляю это в случае, если кто хочет простой, легко понять решение я знаю, что я бы хотел, прежде чем я напечатал это вверх:

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; 
      } 
Смежные вопросы