tl; dr
Hãy để các lớp java.time hiện đại của JSR 310 tự động tạo văn bản cục bộ, thay vì đồng hồ 12 giờ và AM / PM mã hóa cứng.
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 sáng
Tự động bản địa hóa
Thay vì nhấn mạnh vào đồng hồ 12 giờ với AM / PM, bạn có thể muốn để java.time tự động bản địa hóa cho bạn. Gọi DateTimeFormatter.ofLocalizedTime
.
Để bản địa hóa, chỉ định:
FormatStyle
để xác định chuỗi dài hay viết tắt.
Locale
để xác định:
- Các ngôn ngữ loài người để dịch tên trong ngày, tên của tháng, và như vậy.
- Các chuẩn mực văn hóa quyết định các vấn đề viết tắt, viết hoa, chấm câu, dấu phân cách, v.v.
Ở đây chúng ta có được thời gian hiện tại như đã thấy trong một múi giờ cụ thể. Sau đó, chúng tôi tạo ra văn bản để đại diện cho thời gian đó. Chúng tôi bản địa hóa ngôn ngữ Pháp trong văn hóa Canada, sau đó là ngôn ngữ tiếng Anh trong văn hóa Hoa Kỳ.
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 ) ;
Xem mã này chạy trực tiếp tại IdeOne.com .
10 h 31
10:31 sáng
SimpleDateFormat formatDate = new SimpleDateFormat("hh:mm a");