Cómo obtener el nombre checo del mes

Tengo un problema con obtener un nombre de mes en mi idioma – checo.

Quiero obtener el nombre del mes como sustantivo, pero siempre obtengo el título inflected. Intenté muchas maneras de conseguir el nombre, pero todas las maneras vuelven inflected el título del nombre del mes

Por ejemplo quiero conseguir el nombre de octubre en el checo "Říjen", pero consigo siempre "října".

Calendar cal=Calendar.getInstance(); SimpleDateFormat month_date = new SimpleDateFormat("MMMMMMMMM"); String month_name = month_date.format(cal.getTime()); DateFormat formatData = new SimpleDateFormat("d.MMMM yyyy H:mm"); System.out.println(month_name); System.out.println(String.format(Locale.getDefault(),"%tB", cal)); System.out.println(formatData.format(cal.getTime())); 

Todo devuelve mal formato para mí. ¿Hay alguna forma de obtener el nombre correcto del mes? Gracias

Utilizar este código de ejemplo

 public static void main(String[] args) { Calendar cal= Calendar.getInstance(); Locale loc = new Locale("cs", "CZ"); System.out.println(String.format(loc,"%tB", cal)); } 

Recibo salida

íjen

Que se parece a lo que quieres (explícitamente Locale tu Locale ).

Usted puede solucionar esto ya, pero aquí está la solución. Hice un poco de investigación y la razón es el cambio en java.text.DateFormatSymbols en Java 8 (véase la guía de compatibilidad ).

Hay una diferencia entre el formato y las formas independientes. Formato de formularios: ledna, února, března, etc .; Formas autónomas: leden, únor, březen, etc.

También de acuerdo a las reglas de la lengua el nombre del mes cuando está solo comienza con el carácter más bajo, a menos que comience la oración.

Este código le proporcionará el resultado deseado.

 public static void main(String[] args) { Calendar cal = Calendar.getInstance(); Locale loc = new Locale("cs", "CZ"); System.out.println(cal.getDisplayName(Calendar.MONTH, Calendar.LONG_STANDALONE, loc)); } 

Al final encuentro la mejor solución para este problema. El problema es que el formato "MMMM" se utiliza para "nombre de formato" del mes (fe "ledna"). Si necesitas un "nombre independiente" del mes (fe "leden") debes usar "LLLL" en su lugar. La documentación completa del formato de fecha se puede encontrar aquí:

https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html

Aquí está ejemplo sencillo:

DateFormat.format("LLLL yyyy", date).toString().capitalize() // returns: Leden 2016

y

 DateFormat.format("MMMM yyyy", date).toString() // returns ledna 2016 

Esta solución funciona para todos los API. Acepte esto como una respuesta correcta.

tl dr

 Month.OCTOBER.getDisplayName ( TextStyle.FULL_STANDALONE , new Locale ( "cs", "CZ" ) ) 

říjen

Gracias a la respuesta de MikeX para mostrar esto es un problema de idioma "independiente". A diferencia del inglés, algunos idiomas como el checo alteran la ortografía del mes dependiendo del contexto de su uso.

Uso de java.time

El enfoque moderno utiliza las clases java.time. La pregunta y otras respuestas están obsoletas, utilizando las viejas y SimpleDateFormat clases de fecha y hora ( Calendar , SimpleDateFormat , DateFormat , etc.) que ahora son heredadas, suplantadas por las clases java.time. Consulte a continuación para el back-port de Android.

El enum Month proporciona un método para localizar el nombre del mes: Month::getDisplayName . Pase un TextStyle indica full-narrow-short y si desea que el tipo independiente o combo.

Cuando se puede hacer un bucle a través de estos para ver todos los resultados posibles.

 Locale locale = new Locale ( "cs", "CZ" ); for ( Month month : EnumSet.allOf ( Month.class ) ) { System.out.println ( "\nMonth: " + month ); for ( TextStyle textStyle : EnumSet.allOf ( TextStyle.class ) ) { String output = month.getDisplayName ( textStyle, locale ) + " | " + textStyle; System.out.println ( output ); } } 
 Month: JANUARY ledna | FULL leden | FULL_STANDALONE Led | SHORT I | SHORT_STANDALONE l | NARROW l | NARROW_STANDALONE Month: FEBRUARY února | FULL únor | FULL_STANDALONE Úno | SHORT II | SHORT_STANDALONE ú | NARROW ú | NARROW_STANDALONE Month: MARCH března | FULL březen | FULL_STANDALONE Bře | SHORT III | SHORT_STANDALONE b | NARROW b | NARROW_STANDALONE Month: APRIL dubna | FULL duben | FULL_STANDALONE Dub | SHORT IV | SHORT_STANDALONE d | NARROW d | NARROW_STANDALONE Month: MAY května | FULL květen | FULL_STANDALONE Kvě | SHORT V | SHORT_STANDALONE k | NARROW k | NARROW_STANDALONE Month: JUNE června | FULL červen | FULL_STANDALONE Čer | SHORT VI | SHORT_STANDALONE č | NARROW č | NARROW_STANDALONE Month: JULY července | FULL červenec | FULL_STANDALONE Čvc | SHORT VII | SHORT_STANDALONE č | NARROW č | NARROW_STANDALONE Month: AUGUST srpna | FULL srpen | FULL_STANDALONE Srp | SHORT VIII | SHORT_STANDALONE s | NARROW s | NARROW_STANDALONE Month: SEPTEMBER září | FULL září | FULL_STANDALONE Zář | SHORT IX | SHORT_STANDALONE z | NARROW z | NARROW_STANDALONE Month: OCTOBER října | FULL říjen | FULL_STANDALONE Říj | SHORT X | SHORT_STANDALONE ř | NARROW ř | NARROW_STANDALONE Month: NOVEMBER listopadu | FULL listopad | FULL_STANDALONE Lis | SHORT XI | SHORT_STANDALONE l | NARROW l | NARROW_STANDALONE Month: DECEMBER prosince | FULL prosinec | FULL_STANDALONE Pro | SHORT XII | SHORT_STANDALONE p | NARROW p | NARROW_STANDALONE 

Acerca de java.time

El marco java.time está integrado en Java 8 y versiones posteriores. Estas clases suplantan las viejas clases de fecha y hora heredadas , como java.util.Date , Calendar y SimpleDateFormat .

El proyecto Joda-Time , ahora en modo de mantenimiento , recomienda la migración a las clases java.time .

Para obtener más información, consulte el Tutorial de Oracle . Y busca Stack Overflow para muchos ejemplos y explicaciones. La especificación es JSR 310 .

Dónde obtener las clases java.time?

  • Java SE 8 , Java SE 9 y posterior
    • Incorporado.
    • Parte de la API Java estándar con una implementación integrada.
    • Java 9 agrega algunas características y correcciones menores.
  • Java SE 6 y Java SE 7
    • Gran parte de la funcionalidad de java.time se retroporta a Java 6 y 7 en ThreeTen-Backport .
  • Androide
    • El proyecto ThreeTenABP adapta específicamente a ThreeTen-Backport (mencionado anteriormente) para Android.
    • Consulte Cómo utilizar ThreeTenABP ….
  • Cómo crear una instancia de moneda con un país no ISO 3166 como en_UK?
  • Internacionalización del problema string.xml
  • Configuración regional: onConfigurationChanged not called
  • Android - El idioma de WebView cambia abruptamente en Android N
  • ¿Por qué Locale.getDefault (). GetLanguage () en Android devuelve el nombre para mostrar en lugar del código de idioma?
  • Configuración de la configuración regional en Android
  • Cómo forzar el lenguaje en la aplicación android
  • La actividad está parpadeando tras el cambio de configuración regional en Android 4.1+
  • ¿Cómo detectar si el idioma es el inglés (Todas las variantes) en Android?
  • Comprueba qué configuración regional se está ejecutando en Android
  • Cómo restaurar la configuración regional predeterminada de una aplicación para Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.