Cómo obtener el nombre del mes del Calendario


Respuestas:


99

También obtendrá de esta manera.

  String getMonthForInt(int num) {
        String month = "wrong";
        DateFormatSymbols dfs = new DateFormatSymbols();
        String[] months = dfs.getMonths();
        if (num >= 0 && num <= 11 ) {
            month = months[num];
        }
        return month;
    }

6
La implementación de DateFormatSymbols se cambió en JDK 8, por lo que el método getMonths ya no devuelve los valores correctos para todas las configuraciones
ahaaman

1
¿Podría dar una solución alternativa / de trabajo para JDK8?
Dominik

¿Cuándo obtendrías un mes como número?
Mickey Perlstein

Mickey para responder a tu pregunta, así es como obtienes el mes como int y lo usas: public static void main (String [] args) {int month; GregorianCalendar date = new GregorianCalendar (); mes = date.get (Calendar.MONTH); System.out.println ("El mes actual es" + (mes + 1) + "y el nombre del mes es" + getMonthForInt (mes)); } static String getMonthForInt (int num) {String mes = "incorrecto"; DateFormatSymbols dfs = new DateFormatSymbols (); Cadena [] meses = dfs.getMonths (); if (num> = 0 && num <= 11) {mes = meses [num]; } mes de retorno; }
Ajay Kumar

193

puede lograrlo usando SimpleDateFormat , que está destinado a formatear la fecha y la hora.

Calendar cal = Calendar.getInstance();
System.out.println(new SimpleDateFormat("MMM").format(cal.getTime()));

Esto funcionará, pero me gustaría obtener la cadena repr. del mes en el que conozco el índice. Creo que usaré los otros enfoques, gracias.
ogzd

47
esto me ayudó a obtener el nombre del mes actual. aunque usé ("MMMM") para obtener el nombre completo del mes en lugar de uno abreviado.
Speedynomads

77

Tan simple como esto

mCalendar = Calendar.getInstance();    
String month = mCalendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());

4
El uso de la abstracción de Calendar es la solución más elegante en mi opinión. +1
sebastian

2
¡Incorrecto! El problema estará en idiomas con casos. Por ejemplo, en las configuraciones regionales eslavas devolverá el mes en caso de genitivo, por ejemplo, para octubre en la configuración regional ru-RU recibirá en октябряlugar de Октябрьlo que probablemente espera.
Nick Sikrier

41

Esta es la solución que se me ocurrió para un proyecto de clase:

public static String theMonth(int month){
    String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
    return monthNames[month];
}

El número que ingresa proviene de una Calendar.MONTHllamada.


2
Esto es útil para mínew SimpleDateFormat("MMMM").format(cal.getTime());
Pratik Butani

esta es una solución débil, ¿qué tal enero, febrero, etc., no además de enero, febrero, etc.? Esto no cubrirá toda la situación
Abeer zaroor

2
Bueno, deberías agregar 1 al mes. Las matrices comienzan desde 0.
RoccoDev

esto es malo, ¿estás reinventando java?
Mickey Perlstein

1
Esto funciona para usuarios de habla inglesa. ¿Y los demás?
Advait S

33

Si tiene una interfaz en varios idiomas, puede usar getDisplayName para mostrar el nombre del mes con control del idioma de visualización.

aquí hay un ejemplo de cómo mostrar el nombre del mes en inglés, francés, árabe y árabe en un país específico como "Siria":

    Calendar c = Calendar.getInstance();
    System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH ) );
    System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.FRANCE ) );
    System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, new Locale("ar") ) );
    System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, new Locale("ar", "SY") ) );
    System.out.println(c.getTime().toString());

el resultado es:

  January
  janvier
  يناير
  كانون الثاني
  Sat Jan 17 19:31:30 EET 2015

¿Qué versión de Java es esta?
Muhammad Gelbana

16
SimpleDateFormat dateFormat = new SimpleDateFormat( "LLLL", Locale.getDefault() );
dateFormat.format( date );

Para algunos idiomas (por ejemplo, ruso), esta es la única forma correcta de obtener los nombres de los meses independientes.

Esto es lo que obtiene, si usa getDisplayNamedesde el Calendaro DateFormatSymbolspara enero:

января (que es correcta para una cadena de fecha completa: " 10 января, 2014 ")

pero en el caso de un nombre de mes independiente, esperaría:

январь


Es una respuesta correcta para la configuración regional RU. Aunque muy extraño, ese SDK de Android no contiene la especificación 'LLLL'.
Anfet

12

Joda-Time

¿Qué tal usar Joda-Time ? Es una API de fecha y hora mucho mejor para trabajar (y Januarysignifica enero aquí. No es como Calendar, que usa0-based índices durante meses).

Puede usar el AbstractDateTime#toString( pattern )método para formatear la fecha en el formato especificado:

DateTime date = DateTime.now();
String month = date.toString("MMM");

Nombre del mes desde el número

Si desea un nombre de mes para un número de mes en particular, puede hacerlo así:

int month = 3;
String monthName = DateTime.now().withMonthOfYear(month).toString("MMM");

Localizar

El enfoque anterior utiliza la configuración regional predeterminada actual de su JVM para el idioma del nombre del mes. En su lugar, desea especificar un objeto Locale.

String month = date.toString( "MMM", Locale.CANADA_FRENCH );

1
gracias pero estoy feliz con mi viejo SimpleDateFormatyDate
ogzd

@ogzd. Tu deseo. Pero deberías intentarlo y apuesto a que te encantará cantarlo.
Rohit Jain

@ogzd. Publiqué la forma de obtener el nombre del mes del número del mes. Por cierto, ¿por qué querrías hacer eso?
Rohit Jain

10

Month::getDisplayName

Desde Java 8, use la Monthenumeración. El getDisplayNamemétodo localiza automáticamente el nombre del mes.

Pasar:

  • UNA TextStyle para determinar la duración o la abreviatura.
  • A Localepara especificar el lenguaje humano utilizado en la traducción y las normas culturales utilizadas para abreviatura, puntuación, etc.

Ejemplo:

public static String getMonthStandaloneName(Month month) {
    return month.getDisplayName(
        TextStyle.FULL_STANDALONE, 
        Locale.getDefault()
    );
}

9

Puede que sea una pregunta antigua, pero como una línea para obtener el nombre del mes en el que conocemos los índices, utilicé

String month = new DateFormatSymbols().getMonths()[monthNumber - 1];

o para nombres cortos

String month = new DateFormatSymbols().getShortMonths()[monthNumber - 1];

Tenga en cuenta que monthNumbercomienza a contar desde 1, mientras que cualquiera de los métodos anteriores devuelve una matriz, por lo que debe comenzar a contar desde 0.


3

Este código tiene soporte de idioma. Los había usado en la aplicación de Android.

String[] mons = new DateFormatSymbols().getShortMonths();//Jan,Feb,Mar,... 

String[] months = new DateFormatSymbols().getMonths();//January,Februaty,March,...

1
Esto funciona perfectamente, aunque los comentarios son un poco completamente incorrectos
Иво Недев

3

Encontré esto mucho más fácil ( https://docs.oracle.com/javase/tutorial/datetime/iso/enum.html )

private void getCalendarMonth(Date date) {      
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    Month month = Month.of(calendar.get(Calendar.MONTH));       
    Locale locale = Locale.getDefault();
    System.out.println(month.getDisplayName(TextStyle.FULL, locale));
    System.out.println(month.getDisplayName(TextStyle.NARROW, locale));
    System.out.println(month.getDisplayName(TextStyle.SHORT, locale));
}

no Monthcomienza su índice con enero = 1, mientras que el calendario comienza con enero = 0? ¿No Month.of(calendar.get(Calendar.MONTH));fallaría en el caso de enero?
MCO

2

Puede obtener una línea como esta: String monthName = new DataFormatSymbols.getMonths()[cal.get(Calendar.MONTH)]


2

Esto funciona para mi:

String getMonthName(int monthNumber) {
    String[] months = new DateFormatSymbols().getMonths();
    int n = monthNumber-1;
    return (n >= 0 && n <= 11) ? months[n] : "wrong number";
}

Para devoluciones "September"con una línea:

String month = getMonthName(9);

2

De una sola mano:

Tenemos MonthAPI en Java ( java.time.Month). Podemos conseguirlo usandoMonth.of(month);

Aquí, Monthestán indexados como números, por lo que puede proporcionar Month.JANUARYo proporcionar un índice en la API anterior, como 1, 2, 3, 4.

Segunda forma:

ZonedDateTime.now().getMonth();

Esto está disponible en java.time.ZonedDateTime.


1

Creé una extensión de kotlin basada en las respuestas de este tema y, al usar las respuestas de DateFormatSymbols, obtienes una respuesta localizada.

fun Date.toCalendar(): Calendar {
    val calendar = Calendar.getInstance()
    calendar.time = this
    return calendar
}


fun Date.getMonthName(): String {
    val month = toCalendar()[Calendar.MONTH]
    val dfs = DateFormatSymbols()
    val months = dfs.months
    return months[month]
}

1

Esto funcionó para mi

        import java.text.SimpleDateFormat;
        import java.util.Calendar;


        Calendar cal = Calendar.getInstance();
        String currentdate=new SimpleDateFormat("dd-MMM").format(cal.getTime());

0
DateFormat date =  new SimpleDateFormat("dd/MMM/yyyy");
Date date1 = new Date();
System.out.println(date.format(date1));

1
Si bien su respuesta puede ser correcta, es de mala calidad. Explique por qué esta respuesta es correcta.
SubliemeSiem

1
@SubliemeSiem Solo estoy tratando de cambiar el formato y la forma más sencilla de hacerlo: MM- devolverá el nombre del mes en un número entero como 01, 02, 03. MMM-devolverá el nombre del mes en forma abreviada como jan, feb, mar. MMMM: devolverá el nombre completo del mes en formato de cadena como enero.
Amit Mishra

esta es la única respuesta CORRECTA para formatear fechas. utilice un objeto Fecha o Calendario y formatéelo con un formateador. la pregunta en sí es MALA
Mickey Perlstein

0

Devuelve el nombre del mes en inglés. 04 devuelve ABRIL y así sucesivamente.

String englishMonth (int month){
        return Month.of(month);
    }

Sugerencia sencilla y directa, gracias. Tu código no se compila. Tendrá que declarar el tipo de devolución Montho aplicar toStringal resultado antes de devolverlo.
Ole VV

-3

del documento java SimpleDateFormat:

*         <td><code>"yyyyy.MMMMM.dd GGG hh:mm aaa"</code>
 *         <td><code>02001.July.04 AD 12:08 PM</code>
 *         <td><code>"EEE, d MMM yyyy HH:mm:ss Z"</code>
 *         <td><code>Wed, 4 Jul 2001 12:08:56 -0700</code>

No veo cómo esto responde a la pregunta formulada.
jhpg
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.