简体   繁体   中英

how to get month name using current date as input in function

How do I create a function which take current date and return month name?
I have only date its not current date it can be any date like 2013/4/12 or 23/8/8.

Like String monthName("2013/9/11");
when call this function return the month name.

This should be fine.

It depends on the format of date. If you try with February 1, 2011 it would work, just change this string "MMMM d, yyyy" according to your needs. Check this for all format patterns.

And also, months are 0 based, so if you want January to be 1, just return month + 1

   private static int getMonth(String date) throws ParseException{  
            Date d = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH).parse(date);
            Calendar cal = Calendar.getInstance();
            cal.setTime(d);
            int month = cal.get(Calendar.MONTH);
            return month + 1;
    }

If you want month name try this

private static String getMonth(String date) throws ParseException{  
    Date d = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH).parse(date);
    Calendar cal = Calendar.getInstance();
    cal.setTime(d);
    String monthName = new SimpleDateFormat("MMMM").format(cal.getTime());
    return monthName;
}

As I said, check web page I posted for all format patterns. If you want only 3 characters of month, use "MMM" instead of "MMMM"

java.time

I am contributing the modern answer.

    System.out.println(LocalDate.of(2013, Month.SEPTEMBER, 11) // Define the date
            .getMonth()                                        // Get the month
            .getDisplayName(                                   // Get the month name
                    TextStyle.FULL_STANDALONE,                 // No abbreviation
                    Locale.ENGLISH));                          // In which language?

Output is:

September

  1. Use LocalDate from java.time, the modern Java date and time API, for a date.
  2. Use LocalDate.getMonth() and Month.getDisplayName() to get the month name.
  3. Avoid Date , Calendar and SimpleDateFormat used in the old answers from 2013. Those classes are poorly designed, troublesome and long outdated. The modern API is so much nicer to work with. Also avoid switch / case for this purpose since the month names are already built in, and using the library methods gives you clearer, terser and less error-prone code.

Use LocalDate

    LocalDate today = LocalDate.now(ZoneId.systemDefault());
    LocalDate aDate = LocalDate.of(2013, Month.SEPTEMBER, 11); // 2013/9/11
    LocalDate anotherDate = LocalDate.of(2023, 8, 8); // 23/8/8

If you are getting the date as string input, parse the string using a DateTimeFormatter :

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("u/M/d");
    String stringInput = "2013/4/12";
    LocalDate date = LocalDate.parse(stringInput, dateFormatter);
    System.out.println(date);

2013-04-12

Use LocalDate.getMonth() and Month.getDisplayName()

To get the month name you first need to decide in which language you want the month name. I am taking English as an example and still using date from the previous snippet:

    String monthName = date.getMonth()
            .getDisplayName(TextStyle.FULL_STANDALONE, Locale.ENGLISH);
    System.out.println(monthName);

April

Java knows the month names in a wealth of languages. If you want the month name in the user's language, pass Locale.getDefault() as the second argument to getDisplayName() .

Link

Oracle tutorial: Date Time explaining how to use java.time.

Use this code -

Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        int month =  calendar.get(Calendar.MONTH);

So now you have month number, you can use switch case to get name for that month.

If your date is in string format use this-

Date date = new SimpleDateFormat("yyyy-MM-dd").format(d)

Simple solution to get current month by name:

SimpleDateFormat formatterMonth = new SimpleDateFormat("MMMM");
String currentMonth = formatterMonth.format(new Date(System.currentTimeMillis()));

Function to get any month by name using format 2013/9/11: (not tested)

private String monthName(String dateToCheck){
    Date date = new Date();
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
    date = formatter.parse(dateToCheck);
    SimpleDateFormat formatterMonth = new SimpleDateFormat("MMMM");
    return formatterMonth.format(new Date(date.getTime()));
}

I am using a function like this:

public String getDate(String startDate) throws ParseException {
    @SuppressLint("SimpleDateFormat") SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date d = null;
    try {
        d = sdf.parse(startDate);
        sdf.applyPattern("MMMM dd, YYYY"); //this gives output as=> "Month date, year"
    } catch (Exception e) {
        Log.d("Exception", e.getLocalizedMessage());
    }

    return sdf.format(d);
}

You can obtain the "number" of the month as described in the other answer and then you could simply use a switch to obtain a name. Example:

switch(month) {
case 0:
   your name is January
   break;
...
}

PS I think months are zero-based but I'm not 100% sure...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM