我有这个。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String monthName = br.readLine();如何获得monthName变量中包含的月份号?谢谢!
发布于 2014-06-22 20:44:31
使用Java的日历类。它可以将任何给定的字符串解析为有效的日历实例。下面是一个例子(假设这个月是英文的)。
Date date = new SimpleDateFormat("MMMM", Locale.ENGLISH).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使用用户的本地来解析字符串。
请记住,计算机从0开始计数。所以,一月是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()));发布于 2015-10-26 16:17:26
英文月名用Java 8的解决方案。
private int getMonthNumber(String monthName) {
return Month.valueOf(monthName.toUpperCase()).getValue();
}发布于 2014-06-23 09:35:50
使用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
}seach方法的提议签名说明了许多可能的变化。示例:
System.out.println(monthAsNumber("MÄRZ", Locale.GERMANY, false, true));
// output: 2 (zero-based!)如果您想要一个从1开始的月份号,那么只需将1添加到结果中(更直观,也是我的建议)。
从Java 8开始,您也有了一个新的变体,即独立月份。虽然在英语中,这些月份的名称在其他语言中是相同的,但它们并不总是相同的(例如,在捷克语中,"leden“(1月)而不是"ledna")。要实现这些独立表单,可以使用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
}https://stackoverflow.com/questions/24355504
复制相似问题