Cómo controlar la capitalización de mes y los nombres de los días, devuelto por DateFormat?

StackOverflow https://stackoverflow.com/questions/66750

  •  09-06-2019
  •  | 
  •  

Pregunta

Aquí es un programa de prueba rápida:

    public static void main( String[] args )
{
    Date date = Calendar.getInstance().getTime();

    System.out.println("Months:");
    printDate( "MMMM", "en", date );
    printDate( "MMMM", "es", date );
    printDate( "MMMM", "fr", date );
    printDate( "MMMM", "de", date );

    System.out.println("Days:");
    printDate( "EEEE", "en", date );
    printDate( "EEEE", "es", date );
    printDate( "EEEE", "fr", date );
    printDate( "EEEE", "de", date );

}

public static void printDate( String format, String locale, Date date )
{
    System.out.println( locale + ": " + (new SimpleDateFormat( format, new Locale( locale ) )).format( date ) );
}

El resultado es:

Months: en: September es: septiembre fr: septembre de: September Days: en: Monday es: lunes fr: lundi de: Montag

¿Cómo puedo controlar la capitalización de los nombres.Por alguna razón, el español y el francés siempre parecen volver nombres que comienzan con una letra minúscula.

¿Fue útil?

Solución

No todas las lenguas comparten inglés capitalización de las reglas.Supongo que tendría que alterar los datos que utiliza la API, pero su no-inglés clientes pueden no apreciar...

about.com en francés capitalización

Otros consejos

La capitalización de las reglas son diferentes para los distintos idiomas.En francés, el nombre del mes no debe ser en mayúscula.

Puede que no quieras cambiar las mayúsculas -- diferentes culturas capitalizar palabras diferentes (por ejemplo, en alemán que aprovechar cada sustantivo, no sólo en los nombres propios).

tl;dr

¿Cómo puedo controlar la capitalización de los nombres

No.Diferentes idiomas y diferentes culturas tienen diferentes reglas sobre el uso de mayúsculas, signos de puntuación, abreviaturas, etc.

Month.from( LocalDate.now( ZoneId.of( "Pacific/Auckland" ) ) )    // Get current month.
     .getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH )     // Localize automatically. Specify `Locale` to determine human language and cultural norms for translation. 

février

LocalDate.now( ZoneId.of( "Pacific/Auckland" ) )                  // Get current date as seen by people in a certain region (time zone).
    .getDayOfWeek()                                               // Get the day-of-week as a pre-defined `DayOfWeek` enum object.
    .getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH )

lundi

Localizar

Como otros dijeron, que no se debe forzar su propia parroquial (inglés de EE.UU.?) nociones de capitalización.Una buena fecha y hora de la biblioteca, y se deja localizar automáticamente para usted.

java.tiempo

Usted está utilizando terrible viejo fecha de tiempo de clases que ahora están legado, suplantado por el de java.clases de tiempo.

El LocalDate clase representa una fecha valor solo sin la hora del día y sin zona horaria.

Una zona de tiempo es crucial en la determinación de una fecha.Para un momento dado, la fecha varía en todo el mundo por la zona.Por ejemplo, un par de minutos después de la medianoche en París, Francia es un nuevo día, mientras todavía "ayer" en Montréal Québec.

Especificar un en el tiempo apropiado, el nombre de la zona en el formato de continent/region, tales como America/Montreal, Africa/Casablanca, o Pacific/Auckland.No utilice nunca el 3-4 letra de la abreviatura tales como EST o IST como son no cierto zonas de tiempo, no estandarizado, y ni siquiera único(!).

ZoneId z = ZoneId.of( "Asia/Kolkata" );
LocalDate today = LocalDate.now( z );

Para trabajar con un mes, un extracto de Month enumeración de objetos.Lo mismo para el día de la semana, DayOfWeek.

Llame getDisplayName.Pasar un TextStyle para abreviatura.Pasar un Locale para determinar (a) el lenguaje humano para la traducción del nombre del día, nombre del mes, y tal, y (b) las normas culturales decidir las cuestiones de la abreviatura, el uso de mayúsculas, signos de puntuación, separadores, y tal.Tenga en cuenta que Locale ha nada con el tiempo de la zona.

Month m = today.getMonth() ;
String mNameQuébec = m.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ; 
String mNameGermany = m.getDisplayName( TextStyle.FULL , Locale.GERMANY ) ; 

...y...

DayOfWeek dow = today.getDayOfWeek() ;
String dowNameQuébec = dow.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH ) ; 

Cadena de dowNameGermany = dow.getDisplayName( estilo de texto.COMPLETA , la configuración Regional.ALEMANIA ) ;

Acerca de java.tiempo

El java.tiempo el marco está construido en Java 8 y versiones posteriores.Estas clases suplantar la problemática de edad legado fecha y hora de las clases, tales como java.util.Date, Calendar, & SimpleDateFormat.

El Joda-El Tiempo el proyecto, ahora en el modo de mantenimiento, asesora de la migración a la java.tiempo clases.

Para obtener más información, consulte el Oracle Tutorial.Y la búsqueda de Desbordamiento de Pila, hay muchos ejemplos y explicaciones.La especificación es JSR 310.

Con un Controlador JDBC cumplir con JDBC 4.2 o más tarde, usted puede intercambiar java.tiempo los objetos directamente con la base de datos.Sin necesidad de cuerdas o java.sql.* clases.

Dónde obtener el java.clases de tiempo?

  • Java SE 8, Java SE 9, y más tarde
    • Built-in.
    • Parte de la norma API de Java con un paquete de implementación.
    • Java 9 añade algunas características menores y correcciones.
  • Java SE 6 y Java SE 7
    • Mucho de java.el tiempo es la funcionalidad de back-portado a Java 6 y 7 en ThreeTen-Backport.
  • Android
    • Las versiones posteriores de Android paquete de implementaciones de java.clases de tiempo.
    • Para versiones anteriores de Android, la ThreeTenABP el proyecto se adapta ThreeTen-Backport (mencionados anteriormente).Ver Cómo utilizar ThreeTenABP....

El ThreeTen-Extra el proyecto se extiende java.tiempo con clases adicionales.Este proyecto es un terreno de prueba para posibles futuras incorporaciones a java.tiempo.Usted puede encontrar algunos de clases útiles aquí, tales como Interval, YearWeek, YearQuarter, y más.

Estoy teniendo un problema ahora, donde una frase que comienza con "domingo 07 de marte", que no importaría si no fuera en el comienzo de una frase.Supongo que esto no se puede cambiar, a menos que tengo que hacer manual de manipulación de cadena en el primer carácter de la cadena.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top