tl; dr
Deje que las clases modernas java.time de JSR 310 generen automáticamente texto localizado, en lugar de codificar el reloj de 12 horas y AM / PM.
LocalTime // Represent a time-of-day, without date, without time zone or offset-from-UTC.
.now( // Capture the current time-of-day as seen in a particular time zone.
ZoneId.of( "Africa/Casablanca" )
) // Returns a `LocalTime` object.
.format( // Generate text representing the value in our `LocalTime` object.
DateTimeFormatter // Class responsible for generating text representing the value of a java.time object.
.ofLocalizedTime( // Automatically localize the text being generated.
FormatStyle.SHORT // Specify how long or abbreviated the generated text should be.
) // Returns a `DateTimeFormatter` object.
.withLocale( Locale.US ) // Specifies a particular locale for the `DateTimeFormatter` rather than rely on the JVM’s current default locale. Returns another separate `DateTimeFormatter` object rather than altering the first, per immutable objects pattern.
) // Returns a `String` object.
10:31 a. M.
Localizar automáticamente
En lugar de insistir en un reloj de 12 horas con AM / PM, es posible que desee dejar que java.time se localice automáticamente para usted. Llamar DateTimeFormatter.ofLocalizedTime
.
Para localizar, especifique:
FormatStyle
para determinar qué tan larga o abreviada debe ser la cadena.
Locale
para determinar:
- El lenguaje humano para la traducción del nombre del día, el nombre del mes y tal.
- Las normas culturales que deciden cuestiones de abreviatura, capitalización, puntuación, separadores, etc.
Aquí obtenemos la hora actual del día como se ve en una zona horaria particular. Luego generamos texto para representar ese tiempo. Localizamos el idioma francés en la cultura de Canadá, luego el inglés en la cultura de los Estados Unidos.
ZoneId z = ZoneId.of( "Asia/Tokyo" ) ;
LocalTime localTime = LocalTime.now( z ) ;
// Québec
Locale locale_fr_CA = Locale.CANADA_FRENCH ; // Or `Locale.US`, and so on.
DateTimeFormatter formatterQuébec = DateTimeFormatter.ofLocalizedTime( FormatStyle.SHORT ).withLocale( locale_fr_CA ) ;
String outputQuébec = localTime.format( formatterQuébec ) ;
System.out.println( outputQuébec ) ;
// US
Locale locale_en_US = Locale.US ;
DateTimeFormatter formatterUS = DateTimeFormatter.ofLocalizedTime( FormatStyle.SHORT ).withLocale( locale_en_US ) ;
String outputUS = localTime.format( formatterUS ) ;
System.out.println( outputUS ) ;
Vea este código en vivo en IdeOne.com .
10 h 31
10:31 a. M.
SimpleDateFormat formatDate = new SimpleDateFormat("hh:mm a");