2010-08-15 27 views
6

Có thể truy xuất mẫu mặc định cho một ngôn ngữ cụ thể, mà không cần truyền một đối tượng được trả về bởi DateFormat.get*Instance() đến SimpleDateFormat? Tôi hiểu rằng, trong hầu hết mọi trường hợp mọi thứ sẽ ổn, nhưng có một ghi chú trong javadoc, here: "Nếu bạn muốn kiểm soát nhiều hơn đối với định dạng hoặc phân tích cú pháp, (hoặc muốn cung cấp cho người dùng nhiều quyền kiểm soát hơn), bạn có thể thử đúc số DateFormat mà bạn nhận được từ các phương thức của nhà máy đến một số SimpleDateFormat. Điều này sẽ làm việc cho đa số các quốc gia; chỉ cần nhớ đặt nó trong khối try trong trường hợp bạn gặp phải một số bất thường. "Có cách nào khác để lấy mẫu mặc định cho một miền địa phương cụ thể không?

Vì vậy, tôi tự hỏi, tôi nên làm gì trong trường hợp tôi "gặp phải một bất thường"?

Related theme.

mẫu Mã số:

/** 
* Returns '\n'-separated string with available patterns. 
* Optional adds appropriate language code to each pattern string. 
* 
* @param showLanguage Defines if language info is required. 
* @return String with available patterns, optional (if showLanguage is set 
* to "true") adds appropriate language code to each pattern. 
*/ 
public String getPatternsForAvailableLocales(Boolean... showLanguage) { 

    /* Array of available locales */ 
    Locale[] locales = DateFormat.getAvailableLocales(); 

    String result = ""; 

    for (Locale locale : locales) { 

     /* Add language info, if necessary */ 
     if ((showLanguage.length > 0) && (showLanguage[0])) { 
      result += locale.getLanguage() + '\t'; 
     } 

     /* Retrieving pattern */ 
     try { 
      result += ((SimpleDateFormat) 
        DateFormat.getDateTimeInstance(DateFormat.SHORT, 
          DateFormat.SHORT, locale)).toPattern(); 
     } catch (ClassCastException e) { 
      // ******************************** // 
      // What's up? Is there another way? // 
      // ******************************** // 
     } 

     result += '\n'; 

    } 
    return result; 
} 
+0

Tôi không chắc chắn nếu bạn có thể làm bất cứ điều gì nếu bạn "gặp phải một bất thường" bởi vì nó có thể không dựa trên mẫu. Đặc biệt là bởi vì một nhà phát triển có thể cung cấp 'DateFormat' của riêng họ thông qua' java.text.spi.DateFormatProvider'. –

Trả lời

1

Bạn có thể lấy những biểu tượng định dạng ngày cho một ngôn ngữ cụ thể bằng cách thực hiện các mã Java sau:

System.out.println(DateFormatSymbols.getInstance 
     (new Locale("en_US")).getLocalPatternChars()); 
System.out.println(DateFormatSymbols.getInstance 
     (new Locale("nl_NL")).getLocalPatternChars()); 

Trong trường hợp đặc biệt này, Hà Lan, những biểu tượng định dạng ngày đều giống nhau.

GyMdkHmsSEDFwWahKzZ 
GyMdkHmsSEDFwWahKzZ 

Trong trường hợp ký hiệu cho tiếng nước ngoài khác nhau, bạn thay thế ký tự tiếng nước ngoài cho ký tự tiếng Anh trong chuỗi định dạng đơn giản.

Lớp DateFormatSymbols đã tồn tại kể từ ít nhất là Java 1.4.2.

2

Các mô hình chính nó là duy nhất để SimpleDateFormat đó là lý do tại sao bạn đang đúc nó.

Nếu bạn tìm thấy DateFormat không phải là SimpleDateFormat bạn muốn ghi ngoại lệ, ghi lớp thực hiện thực tế và tại thời điểm đó bạn sẽ có đủ thông tin để quyết định cách xử lý tình huống.

Hiện tại, vì không có mẫu nào không thêm mẫu này vào danh sách kết quả nếu nó không phải là SimpleDateFormat.

Nếu tôi có thể hỏi, Tại sao bạn trả về một chuỗi được ghép nối thay vì một tập hợp các chuỗi? Có vẻ như sẽ dễ dàng hơn để lặp lại kết quả của bạn.

Nếu chuỗi nối là cần thiết, hãy sử dụng StringBuilder để tạo chuỗi vì bạn sẽ tạo ít đối tượng hơn và cải thiện hiệu suất. Đó là một thói quen tốt khi ở trong khi xây dựng chuỗi trong một vòng lặp.

+0

Thx cho câu trả lời của bạn. Mặc dù bạn không cung cấp câu trả lời trực tiếp cho câu hỏi cụ thể, bạn đã đề xuất giải pháp hài hòa để xử lý tình huống có thể xảy ra này (như thể hiện bằng thực tế rất có thể là tình huống, nhưng có thể). Vì vậy, tôi nghĩ câu trả lời của bạn có thể được chấp nhận là giải pháp. – Milkywayfarer

+0

Hơn thx cho ý kiến ​​của bạn để mã.Trả lời cho các câu hỏi của bạn: – Milkywayfarer

+0

1) có, tôi đồng ý rằng việc sử dụng các chuỗi ký tự sẽ thuận tiện hơn, nhưng đây chỉ là mã trình diễn để làm rõ câu hỏi được đặt ra là gì. – Milkywayfarer

Các vấn đề liên quan