¿Hay una línea para obtener el nombre del mes en el que lo sabemos int monthNumber = calendar.get(Calendar.MONTH)
? ¿O cuál es la forma más sencilla?
¿Hay una línea para obtener el nombre del mes en el que lo sabemos int monthNumber = calendar.get(Calendar.MONTH)
? ¿O cuál es la forma más sencilla?
Respuestas:
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;
}
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()));
Tan simple como esto
mCalendar = Calendar.getInstance();
String month = mCalendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());
октября
lugar de Октябрь
lo que probablemente espera.
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.MONTH
llamada.
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":
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
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 getDisplayName
desde el Calendar
o DateFormatSymbols
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:
январь
¿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:
DateTime date = DateTime.now();
String month = date.toString("MMM");
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");
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 );
SimpleDateFormat
yDate
Month::getDisplayName
Desde Java 8, use la Month
enumeración. El getDisplayName
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:
public static String getMonthStandaloneName(Month month) {
return month.getDisplayName(
TextStyle.FULL_STANDALONE,
Locale.getDefault()
);
}
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 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.
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,...
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));
}
Month
comienza 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?
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 proporcionar Month.JANUARY
o proporcionar un índice en la API anterior, como 1, 2, 3, 4.
Segunda forma:
ZonedDateTime.now().getMonth();
Esto está disponible en java.time.ZonedDateTime
.
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]
}
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());
DateFormat date = new SimpleDateFormat("dd/MMM/yyyy");
Date date1 = new Date();
System.out.println(date.format(date1));
Devuelve el nombre del mes en inglés. 04 devuelve ABRIL y así sucesivamente.
String englishMonth (int month){
return Month.of(month);
}
Month
o aplicar toString
al resultado antes de devolverlo.
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>