Tl;dr
Laissez le moderne java.time Les classes de la JSR 310 génèrent automatiquement du texte localisé, plutôt que de coder en dur l'horloge de 12 heures et 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 AM
Localiser automatiquement
Au lieu d'insister sur une horloge de 12 heures avec AM/PM, vous pouvez laisser java.time localiser automatiquement pour vous. Appelez DateTimeFormatter.ofLocalizedTime
.
Pour localiser, spécifier :
-
FormatStyle
pour déterminer la longueur ou l'abréviation de la chaîne.
-
Locale
à déterminer :
- Le site le langage humain pour la traduction du nom du jour, du nom du mois, etc.
- Le site normes culturelles décider des questions d'abréviation, de capitalisation, de ponctuation, de séparateurs, etc.
Ici, nous obtenons l'heure actuelle du jour telle qu'elle est vue dans un fuseau horaire particulier. Ensuite, nous générons du texte pour représenter cette heure. Nous localisons en langue française dans la culture canadienne, puis en langue anglaise dans la culture américaine.
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 ) ;
Voir ceci code exécuté en direct sur IdeOne.com .
10 h 31
10:31 AM