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

Получить номер месяца от имени месяца

У меня есть это.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String monthName = br.readLine();

Как получить номер месяца, который содержит переменную monthName? Спасибо!

4b9b3361

Ответ 1

Используйте Java Calendar класс. Он может анализировать любую данную строку в действительном экземпляре календаря. Вот пример (при условии, что месяц на английском языке).

Date date = new SimpleDateFormat("MMMM").parse(monthName);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
println(cal.get(Calendar.MONTH));

Вы можете указать язык в SimpleDateFormat:

String monthName = "März"; // German for march
Date date = new SimpleDateFormat("MMMM", Locale.GERMAN).parse(monthName);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
println(cal.get(Calendar.MONTH));

По умолчанию Java использует локальный пользователь для разбора строки.

Имейте в виду, что компьютер начинает отсчет в 0. Таким образом, январь будет равен 0. Если вы хотите получить доступную для человека дату, вы должны отформатировать экземпляр календаря:

SimpleDateFormat inputFormat = new SimpleDateFormat("MMMM");
Calendar cal = Calendar.getInstance();
cal.setTime(inputFormat.parse(monthName));
SimpleDateFormat outputFormat = new SimpleDateFormat("MM"); // 01-12
println(outputFormat.format(cal.getTime()));

Ответ 2

Решение в Java 8 для имен английского месяца.

private int getMonthNumber(String monthName) {
    return Month.valueOf(monthName.toUpperCase()).getValue();
}

Ответ 3

Другой подход с использованием java.text.DateFormatSymbols заключается в следующем:

public static int monthAsNumber(
  String  month,
  Locale  locale,
  boolean abbreviated,
  boolean caseInsensitive
) {
  DateFormatSymbols dfs = new DateFormatSymbols(locale);
  String[] months = (abbreviated ? dfs.getShortMonths() : dfs.getMonths());

  if (caseInsensitive) {
    for (int i = 0; i < 12; i++) {
      if (months[i].equalsIgnoreCase(month)) {
        return i; // month index is zero-based as usual in old JDK pre 8!
      }
    }
  } else {
    for (int i = 0; i < 12; i++) {
      if (months[i].equals(month)) {
        return i; // month index is zero-based as usual in old JDK pre 8!
      }
    }
  }
  return -1; // no match
}

Предлагаемая подпись метода seach иллюстрирует множество возможных вариаций. Пример:

System.out.println(monthAsNumber("MÄRZ", Locale.GERMANY, false, true));
// output: 2 (zero-based!)

Если вам нужен номер месяца, начинающийся с 1, просто добавьте 1 к результату (более интуитивно понятный, а также мои рекомендации).

Начиная с Java 8, у вас также есть новый вариант, а именно отдельные месяцы. Хотя на английском языке эти месячные имена идентичны на других языках, они не всегда идентичны (например, на чешском языке "leden" (январь) вместо "ledna" ). Для достижения этих автономных форм вы можете использовать Month.getDisplayName(...) (не тестировалось):

public static int monthAsNumber(
  String  month,
  Locale  locale,
  boolean abbreviated,
  boolean caseInsensitive,
  boolean standAlone
) {
  TextStyle style;
  Month[] months = Month.values[];

  if (abbreviated) {
    style = standAlone ? TextStyle.SHORT_STANDALONE : TextStyle.SHORT;
  } else {
    style = standAlone ? TextStyle.FULL_STANDALONE : TextStyle.FULL;
  }

  if (caseInsensitive) {
    for (int i = 0; i < 12; i++) {
      if (months[i].getDisplayName(style, locale).equalsIgnoreCase(month)) {
        return i; // month index is zero-based as usual in old JDK pre 8!
      }
    }
  } else {
    for (int i = 0; i < 12; i++) {
      if (months[i].getDisplayName(style, locale).equals(month)) {
        return i; // month index is zero-based as usual in old JDK pre 8!
      }
    }
  }
  return -1; // no match
}

Ответ 4

Если у вас есть название месяца, и вы хотите, чтобы целое число соответствовало этому месяцу попробуйте это

try{   
        Date date = new SimpleDateFormat("MMM").parse(monthName);//put your month name here
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        monthNumber=cal.get(Calendar.MONTH);
        System.out.println(monthNumber);

 }
catch(Exception e)
{
 e.printStackTrace();
}