从月份名称获取月份编号

时间:2014-06-22 20:35:30

标签: java date

我有这个。

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

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

4 个答案:

答案 0 :(得分:24)

使用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使用用户的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()));

答案 1 :(得分:8)

Java 8中的英文月份名称解决方案。

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

答案 2 :(得分:4)

使用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
}

提议的搜索方法签名说明了许多可能的变化。例如:

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

如果您想要一个以1开头的月份编号,那么只需在结果中添加1(更直观,也是我的建议)。

Java 8 开始,您也有一个新变体,即独立月份。虽然在英语中这些月份的名称在其他语言中是相同的,但它们并不总是相同的(例如捷克语和#34; leden&#34;(1月)而不是&#34; ledna&#34;)。要实现这些独立表单,您可以使用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
}

答案 3 :(得分:1)

如果您有月份名称,并且您想要与该月份对应的整数 试试这个

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