Convert Month String to Integer in Java

Viewed 67841

Given a month string such as:

    "Feb"
or
    "February"

Is there any core Java or third party library functionality that would allow you to convert this string to the corresponding month number in a locale agnostic way?

6 Answers

You could parse the month using SimpleDateFormat:

    Date date = new SimpleDateFormat("MMM", Locale.ENGLISH).parse("Feb");
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    int month = cal.get(Calendar.MONTH);
    System.out.println(month == Calendar.FEBRUARY);

Be careful comparing int month to an int (it does not equal 2!). Safest is to compare them using Calendar's static fields (like Calendar.FEBRUARY).

An alternative to SimpleDateFormat using Joda time:

    import org.joda.time.DateTime;
    import org.joda.time.format.DateTimeFormat;
    import org.joda.time.format.DateTimeFormatter;
    ...

    // if default locale is ok simply omit '.withLocale(...)'
    DateTimeFormatter format = DateTimeFormat.forPattern("MMM");
    DateTime instance        = format.withLocale(Locale.FRENCH).parseDateTime("août");  

    int month_number         = instance.getMonthOfYear();
    String month_text        = instance.monthOfYear().getAsText(Locale.ENGLISH);

    System.out.println( "Month Number: " + month_number );
    System.out.println( "Month Text:   " + month_text   );

    OUTPUT:
        Month Number: 8
        Month Text:   August

Here is the way to do it:

 String a = "August 10, 2021 10:00 AM";

    SimpleDateFormat fromUser = new SimpleDateFormat("MMMM dd, yyyy hh:mm a");

    SimpleDateFormat myFormat = new SimpleDateFormat("MM/dd/yyyy");

    String reformattedStr = myFormat.format(fromUser.parse(a));

    System.out.println(reformattedStr); // 08/10/2021
Related