从月份名称获取月份编号

use*_*475 15 java date

我有这个.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String monthName = br.readLine();
Run Code Online (Sandbox Code Playgroud)

如何获取monthName变量中包含的月份数?谢谢!

Mat*_*o12 26

使用Java的Calendar类.它可以将任何给定的字符串解析为有效的日历实例.这是一个例子(假设月份是英文).

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

您可以在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));
Run Code Online (Sandbox Code Playgroud)

默认情况下,Java使用用户的local来解析字符串.

请记住,计算机从0开始计数.因此,1月将为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()));
Run Code Online (Sandbox Code Playgroud)

  • [已弃用](http://docs.oracle.com/javase/8/docs/api/java/util/Date.html#getMonth--)javadocs说明要使用的内容 (4认同)
  • *有效*的事实并不意味着它是有效的代码.你还在使用'Date#getMonth`,这是**已弃用**(这意味着:**不要使用它**).使用"日历"代替检索月份.或者,如果您使用的是Java 8,请使用新的[Date Time API](http://docs.oracle.com/javase/tutorial/datetime/)来完成这项工作. (3认同)

Yur*_*kha 11

Java 8中的解决方案,用于英文月份名称.

private int getMonthNumber(String monthName) {
    return Month.valueOf(monthName.toUpperCase()).getValue();
}
Run Code Online (Sandbox Code Playgroud)