shinynewbike
shinynewbike

Reputation: 2352

Java get month string from integer

Is there a better way to compact this method i.e. reduce the cyclomatic complexity by avoid the switch cases?

String monthString;
        switch (month) {
            case 1:  monthString = "January";       break;
            case 2:  monthString = "February";      break;
            case 3:  monthString = "March";         break;
            case 4:  monthString = "April";         break;
            case 5:  monthString = "May";           break;
            case 6:  monthString = "June";          break;
            case 7:  monthString = "July";          break;
            case 8:  monthString = "August";        break;
            case 9:  monthString = "September";     break;
            case 10: monthString = "October";       break;
            case 11: monthString = "November";      break;
            case 12: monthString = "December";      break;
            default: monthString = "Invalid month"; break;
        }
        System.out.println(monthString);

Upvotes: 56

Views: 129794

Answers (7)

Abhishek Shah
Abhishek Shah

Reputation: 1424

Month enum

You could use the Month enum. This enum is defined as part of the new java.time framework built into Java 8 and later.

int monthNumber = 10;
Month.of(monthNumber).name();

The output would be:

OCTOBER

Localize

Localize to a language beyond English by calling getDisplayName on the same Enum.

Specify a Locale to determine the human language and cultural norms used in localizing. Example: Locale.of( "fr" , "CA" ) for French language with Canada cultural norms.

String output = Month.OCTOBER.getDisplayName ( TextStyle.FULL , Locale.of( "fr" , "CA" );  // French language, Canada cultural norms.

output:

octobre

Upvotes: 25

Harry Joy
Harry Joy

Reputation: 59694

Take an array containing months name.

String[] str = {"January",      
   "February",
   "March",        
   "April",        
   "May",          
   "June",         
   "July",         
   "August",       
   "September",    
   "October",      
   "November",     
   "December"};

Then where you want to take month use as follows:

if(i<str.length)
    monthString = str[i-1];
else
    monthString = "Invalid month";

Upvotes: 9

Manikandan
Manikandan

Reputation: 828

DateFormatSymbols class provides methods for our ease use.

To get short month strings. For example: "Jan", "Feb", etc.

getShortMonths()

To get month strings. For example: "January", "February", etc.

getMonths()

Sample code to return month string in mmm format,

private static String getShortMonthFromNumber(int month){
    if(month<0 || month>11){
        return "";
    }
    return new DateFormatSymbols().getShortMonths()[month];
}

Upvotes: 1

AS4noob
AS4noob

Reputation: 133

This has already been mentioned, but here is a way to place the code within a method:

    public static String getMonthName(int monthIndex) {
         return new DateFormatSymbols().getMonths()[monthIndex].toString();
    }

or if you wanted to create a better error than an ArrayIndexOutOfBoundsException:

    public static String getMonthName(int monthIndex) {
        //since this is zero based, 11 = December
        if (monthIndex < 0 || monthIndex > 11 ) {
            throw new IllegalArgumentException(monthIndex + " is not a valid month index.");
        }
        return new DateFormatSymbols().getMonths()[monthIndex].toString();
    }

Upvotes: 2

Murillo Tavares
Murillo Tavares

Reputation: 19

import java.time.Month;

Month exemple = new Month.of(12);
//---return a Month object with value of December---

String month = exemple.toString();
//---if you want to convert Month to String---

Upvotes: 1

Flash
Flash

Reputation: 16753

Try:

import java.text.DateFormatSymbols;
monthString = new DateFormatSymbols().getMonths()[month-1];

Alternatively, you could use SimpleDateFormat:

import java.text.SimpleDateFormat;
System.out.println(new SimpleDateFormat("MMMM").format(date));

(You'll have to put a date with your month in a Date object to use the second option).

Upvotes: 121

edgarmtze
edgarmtze

Reputation: 25058

You could have an array of strigs and access by index.

  String months[] = {"January", "February", "March", "April",
                     "May", "June", "July", "August", "September",
                     "October", "November", "December"};

Upvotes: 3

Related Questions