Подтвердить что ты не робот

Преобразование строки месяца в целое в Java

Для строки месяца, например:

    "Feb"
or
    "February"

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

4b9b3361

Ответ 1

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

Ответ 2

Вы можете анализировать месяц с помощью 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 с int (он не равен 2!). Safest - сравнивать их с помощью статических полей Calendar (например, Calendar.FEBRUARY).

Ответ 4

Решение 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