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(newSimpleDateFormat("MMM").format(cal.getTime()));
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:
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,newLocale("ar")));System.out.println(c.getDisplayName(Calendar.MONTH,Calendar.LONG,newLocale("ar","SY")));System.out.println(c.getTime().toString());
el resultado es:
January
janvier
ينايركانونالثانيSatJan1719:31:30 EET 2015
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).
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.
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.
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)]
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 =thisreturn calendar
}
fun Date.getMonthName():String{
val month = toCalendar()[Calendar.MONTH]
val dfs =DateFormatSymbols()
val months = dfs.months
return months[month]}
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.
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,4Jul200112:08:56-0700</code>
Respuestas:
También obtendrá de esta manera.
fuente
puede lograrlo usando SimpleDateFormat , que está destinado a formatear la fecha y la hora.
fuente
Tan simple como esto
fuente
октября
lugar deОктябрь
lo que probablemente espera.Esta es la solución que se me ocurrió para un proyecto de clase:
El número que ingresa proviene de una
Calendar.MONTH
llamada.fuente
new SimpleDateFormat("MMMM").format(cal.getTime());
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":
el resultado es:
fuente
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
getDisplayName
desde elCalendar
oDateFormatSymbols
para enero:января (que es correcta para una cadena de fecha completa: " 10 января, 2014 ")
pero en el caso de un nombre de mes independiente, esperaría:
январь
fuente
Joda-Time
¿Qué tal usar Joda-Time ? Es una API de fecha y hora mucho mejor para trabajar (y
January
significa 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:Nombre del mes desde el número
Si desea un nombre de mes para un número de mes en particular, puede hacerlo así:
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.
fuente
SimpleDateFormat
yDate
Month::getDisplayName
Desde Java 8, use la
Month
enumeración. ElgetDisplayName
método localiza automáticamente el nombre del mes.Pasar:
TextStyle
para determinar la duración o la abreviatura.Locale
para especificar el lenguaje humano utilizado en la traducción y las normas culturales utilizadas para abreviatura, puntuación, etc.Ejemplo:
fuente
Puede que sea una pregunta antigua, pero como una línea para obtener el nombre del mes en el que conocemos los índices, utilicé
o para nombres cortos
Tenga en cuenta que
monthNumber
comienza a contar desde 1, mientras que cualquiera de los métodos anteriores devuelve una matriz, por lo que debe comenzar a contar desde 0.fuente
Este código tiene soporte de idioma. Los había usado en la aplicación de Android.
fuente
Encontré esto mucho más fácil ( https://docs.oracle.com/javase/tutorial/datetime/iso/enum.html )
fuente
Month
comienza su índice con enero = 1, mientras que el calendario comienza con enero = 0? ¿NoMonth.of(calendar.get(Calendar.MONTH));
fallaría en el caso de enero?Puede obtener una línea como esta:
String monthName = new DataFormatSymbols.getMonths()[cal.get(Calendar.MONTH)]
fuente
Esto funciona para mi:
Para devoluciones
"September"
con una línea:fuente
De una sola mano:
Tenemos
Month
API en Java (java.time.Month
). Podemos conseguirlo usandoMonth.of(month);
Aquí,
Month
están indexados como números, por lo que puede proporcionarMonth.JANUARY
o proporcionar un índice en la API anterior, como 1, 2, 3, 4.Segunda forma:
Esto está disponible en
java.time.ZonedDateTime
.fuente
Creé una extensión de kotlin basada en las respuestas de este tema y, al usar las respuestas de DateFormatSymbols, obtienes una respuesta localizada.
fuente
Esto funcionó para mi
fuente
fuente
Devuelve el nombre del mes en inglés. 04 devuelve ABRIL y así sucesivamente.
fuente
Month
o aplicartoString
al resultado antes de devolverlo.del documento java SimpleDateFormat:
fuente