我有这个。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String monthName = br.readLine();
如何获取monthName变量中包含的月份数? 谢谢!
答案 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();
}