如何在Java中把月份名称转换为数字

715 阅读2分钟

在这篇文章中,我们将看到如何在Java中把月份名称转换成数字。

请注意,我们将使用**月名的前三个字母(第一个字母为大写)**来转换为数字。

在Java中,有多种方法可以将月名转换成数字。让我们来看看。

使用DateTimeFormatter和TemporalAccessor

如果你使用的是Java 8及以上版本,这是首选方案。

  • 用给定的本地和MMM 作为模式创建DateTimeFormatter 对象。
  • 使用DateTimeFormatter的parse() 方法解析给定的月份名称,并获得TemporalAccessor对象。
  • 使用TemporalAccessorget(ChronoField.MONTH_OF_YEAR) 方法获得月号。
package org.arpit.java2blog;

import java.text.ParseException;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoField;
import java.time.temporal.TemporalAccessor;
import java.util.Locale;

public class ConvertMonthNameToNumberJava8 {

    public static void main(String[] args) throws ParseException {
        int monthNumber1 = getNumberFromMonthName("Sep", Locale.ENGLISH);
        System.out.println("Month number of September in English: "+monthNumber1);

        int monthNumber2 = getNumberFromMonthName("févr.", Locale.FRENCH);
        System.out.println("Month number of Oktober  in German:"+monthNumber2);
    }

    public static int getNumberFromMonthName(String monthName, Locale locale) throws ParseException {

        DateTimeFormatter dtFormatter = DateTimeFormatter.ofPattern("MMM")
                                        .withLocale(locale);
        TemporalAccessor temporalAccessor = dtFormatter.parse(monthName);
        return temporalAccessor.get(ChronoField.MONTH_OF_YEAR);
    }
}

输出

Month number of September in English: 9
Month number of February in French: 2

使用日历类和SimpleDateFormat

你可以使用SimpleDateFormat ,将MonthName转换为Date对象,并将Date设置为Calendar实例,然后使用Calendar.get()方法来获取月号。

你可以根据你的要求指定Locale。

请注意,Calendar类遵循基于0的月份索引。
0代表一月
1代表二月
...
...
11代表十二月

package org.arpit.java2blog;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

public class ConvertMonthNameToNumberMain {

    public static void main(String[] args) throws ParseException {
        int monthNumber1 = getNumberFromMonthName("Sep", Locale.ENGLISH);
        System.out.println("Month number of September in English: "+monthNumber1);

        int monthNumber2 = getNumberFromMonthName("Okt", Locale.GERMAN);
        System.out.println("Month number of Oktober  in German:"+monthNumber2);
    }

    public static int getNumberFromMonthName(String monthName,Locale locale) throws ParseException {

        Date date = new SimpleDateFormat("MMM", locale).parse(monthName);
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return cal.get(Calendar.MONTH);
    }
}

输出

Month number of September in English: 8
Month number of Oktober  in German:9

如果你想要从1到12的数字,你可以简单地在上述代码的高亮行添加1。

return cal.get(Calendar.MONTH) + 1;

使用Month enum [ Java 8 ]

如果你只对英语地区感兴趣,你可以使用Month ENUM来获取月数。

package org.arpit.java2blog;

import java.time.Month;

public class ConvertMonthNameToNumberEnglish {

    public static void main(String[] args) {
        int monthNumber1 = getNumberFromMonthName("SEPTEMBER");
        System.out.println("Month number of September in English: "+monthNumber1);
    }

    public static int getNumberFromMonthName(String monthName) {
        return Month.valueOf(monthName.toUpperCase()).getValue();
    }
}

输出

Month number of September in English: 9

请注意,你需要为Month枚举传递完整的月份名称,如SEPTEMBER。

以上就是关于如何在Java中把月份名称转换成数字的全部内容。