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!
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()));
Solution en Java 8 pour les noms de mois en anglais.
private int getMonthNumber(String monthName) {
return Month.valueOf(monthName.toUpperCase()).getValue();
}
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
}
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();
}