Date date = new SimpleDateFormat("MMMM", Locale.ENGLISH).parse(monthName);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
println(cal.get(Calendar.MONTH));
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));
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
}
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
}
try{
Date date = new SimpleDateFormat("MMM", Locale.ENGLISH).parse(monthName);//put your month name in english here
Calendar cal = Calendar.getInstance();
cal.setTime(date);
monthNumber=cal.get(Calendar.MONTH);
System.out.println(monthNumber);
}
catch(Exception e)
{
e.printStackTrace();
}
final DateTimeFormatter dtFormatter = DateTimeFormatter.ofPattern("MMM").withLocale(Locale.ENGLISH);
final TemporalAccessor temporalAccessor = dtFormatter.parse(month);
final int monthNumber = temporalAccessor.get(ChronoField.MONTH_OF_YEAR);
6条答案
按热度按时间wz3gfoph1#
使用Java的Calendar类,它可以将任何给定的字符串解析为有效的日历示例,下面是一个例子(假设月份是英语的)。
您可以在SimpleDateFormat中指定语言:
默认情况下,Java使用用户的本地变量来解析字符串。
请记住,计算机从0开始计数。因此,January将为0。如果您希望获得人类可读的日期,则应设置日历示例的格式:
jgwigjjp2#
英语月份名称的Java 8解决方案。
tp5buhyn3#
使用
java.text.DateFormatSymbols
的另一种方法是:搜索方法的建议签名说明了许多可能的变化。例如:
如果你想要一个从1开始的月份数字,那么只需要在结果中加上1(更直观,也是我的建议)。
从Java 8开始,您也有了一个新的变体,即独立的月份。虽然在英语中,这些月份的名称在其他语言中是相同的,但它们并不总是相同的(例如,在捷克语中,“leden”(一月)而不是“ledna”)。要实现这些独立的形式,您可以使用Month.getDisplayName(...)(未测试):
btxsgosb4#
如果您有月份名称,并且想要与该月份相对应整数,请尝试
dhxwm5r45#
* Java时间 *
2014年3月,modern date-time API API取代了容易出错的
java.util
日期时间API及其格式化APISimpleDateFormat
。从那时起,强烈建议停止使用旧版API。java.time
(现代日期-时间API)的解决方案:**使用模式为
MMMM
的DateTimeFormatter
来解析给定的日期。如果月份的名称可以是不同的大小写,则应构建并使用不区分大小写的DateTimeFormatter
。从**Trail: Date Time**了解有关现代日期-时间API的更多信息。
ru9i0ody6#
使用Java 8 API