web-dev-qa-db-fra.com

Obtenir le numéro du mois à partir du nom du mois

J'ai ceci.

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

Comment obtenir le numéro du mois qui contient la variable monthName? Merci!

13
user3765475

Utilisez la classe Calendar de Java. Il peut analyser une chaîne donnée dans une instance de calendrier valide ..__ Voici un exemple (en supposant que le mois est en anglais).

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

Vous pouvez spécifier la langue dans 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));

Par défaut, Java utilise le répertoire local de l'utilisateur pour analyser la chaîne.

N'oubliez pas qu'un ordinateur commence à compter à 0. Janvier sera donc 0. Si vous voulez une date lisible par l'homme, vous devez formater l'instance de calendrier:

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()));
24
Matt3o12

Solution en Java 8 pour les noms de mois en anglais.

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

Une autre approche utilisant Java.text.DateFormatSymbols est la suivante:

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
}

La méthode proposée de signature de la recherche illustre les nombreuses variations possibles. Exemple:

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

Si vous voulez un numéro de mois commençant par 1, ajoutez simplement 1 au résultat (plus intuitif et aussi ma recommandation). 

À partir de Java 8, vous avez également une nouvelle variante, à savoir les mois autonomes. Bien qu'en anglais ces noms de mois soient identiques dans d'autres langues, ils ne le sont pas toujours (par exemple en tchèque "leden" (janvier) au lieu de "ledna"). Pour obtenir ces formulaires autonomes, vous pouvez utiliser Month.getDisplayName (...) (non testé):

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
}
3
Meno Hochschild

Si vous avez le nom du mois et que vous voulez un nombre entier correspondant à ce mois, essayez ce

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();
}
1
Prince