У меня есть это.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String monthName = br.readLine();
Как получить номер месяца, который содержит переменную monthName? Спасибо!
У меня есть это.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String monthName = br.readLine();
Как получить номер месяца, который содержит переменную monthName? Спасибо!
Используйте 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()));
Решение в Java 8 для имен английского месяца.
private int getMonthNumber(String monthName) {
return Month.valueOf(monthName.toUpperCase()).getValue();
}
Другой подход с использованием 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
}
Если у вас есть название месяца, и вы хотите, чтобы целое число соответствовало этому месяцу попробуйте это
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();
}