2017-09-03 125 views
5

Bài tập này xuất phát từ cuốn sách Horstmann của Core Java cho thiếu kiên nhẫn:hiển thị trong Java với chữ số Thái

Viết một chương trình mà cho thấy ngày và phong cách thời gian định dạng trong [...] Thái Lan (bằng chữ số Thái).

tôi đã cố gắng để giải quyết vấn exerciese với đoạn mã sau:

Locale locale = Locale.forLanguageTag("th-TH-TH"); 
    LocalDateTime dateTime = LocalDateTime.now(); 
    DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM); 
    System.out.println(formatter.withLocale(locale).format(dateTime)); 

Vấn đề là trong khi tên của tháng được đưa ra đúng ở Thái (ít nhất tôi nghĩ vậy, vì tôi không biết tiếng Thái), các số vẫn được định dạng bằng chữ số Ả Rập, đầu ra như sau:

3 ก.ย. 2017, 22:42:16

tôi đã cố gắng thẻ ngôn ngữ khác nhau ("th-TH", "th-TH-TH", "th-TH-u-nu-thai") không có kết quả. Tôi nên thay đổi điều gì để làm cho chương trình hoạt động như mong muốn? Tôi sử dụng JDK 1.8.0_131 trên Windows 10 64 bit.

+0

Tốt câu hỏi và câu trả lời. Nhưng FYI, ['LocalDateTime'] (https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html) cố ý loại bỏ thông tin múi giờ. Tốt hơn nên sử dụng ['ZonedDateTime'] (https://docs.oracle.com/javase/8/docs/api/java/time/ZonedDateTime.html) và giữ lại thông tin có giá trị đó. Cũng tốt hơn để chuyển rõ ràng múi giờ mong muốn/mong đợi của bạn sang phương thức '.now (ZoneId)' của lớp học hơn là dựa hoàn toàn vào múi giờ mặc định hiện tại của JVM có thể thay đổi bất kỳ lúc nào trong thời gian chạy. –

+0

Đây là một câu hỏi và câu trả lời hữu ích, nhưng nó vẫn để tôi tự hỏi làm thế nào bạn sẽ bao giờ xác minh rằng mã là chính xác nếu bạn không thể hiểu được đầu ra. :) – ajb

+0

@ajb Đầu ra trông có vẻ không phải là phương Tây đối với tôi :) – lukeg

Trả lời

4

DateTimeFormatter::withDecimalStyle

Tôi đã có thể giải quyết bài tập. Người ta phải vượt qua một DecimalStyle với định dạng bằng cách gọi DateTimeFormatter::withDecimalStyle, như thế này (xem mã trong đậm cho những thay đổi):

 

    Locale locale = Locale.forLanguageTag("th-TH-u-nu-thai"); 
    LocalDateTime dateTime = LocalDateTime.now(); 
    DecimalStyle style = DecimalStyle.of(locale); 
    DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);    
    System.out.println(formatter.withLocale(locale).withDecimalStyle(style).format(dateTime)); 
 
Các vấn đề liên quan