2012-04-27 26 views
10

Tôi có một ứng dụng Android nhỏ mà tôi đang sử dụng để in một ngày cụ thể ở các định dạng khác nhau dựa trên ngôn ngữ.Tại sao java.text.DateFormat trả về cùng một định dạng ngày cho en_US và en_GB trên Android?

Dưới đây là mã của tôi (sử dụng java.text.DateFormat):

Locale[] locales = {new Locale("en", "US"), new Locale("en", "GB"), new Locale("en", "AU"), new Locale("en", "NZ"), new Locale("en", "ZA")}; 
for(int i = 0; i < locales.length; ++i) { 
    Log.d(logKey, locales[i].toString() + " - " + DateFormat.getDateInstance(DateFormat.SHORT, locales[i]).format(Calendar.getInstance().getTime())); 
} 

Kết quả từ này trong LogCat được như sau:

D/FormatPoC( 390): en_US - 4/27/12 
D/FormatPoC( 390): en_GB - 4/27/12 
D/FormatPoC( 390): en_AU - 4/27/12 
D/FormatPoC( 390): en_NZ - 4/27/12 
D/FormatPoC( 390): en_ZA - 4/27/12 

Vì vậy, câu hỏi của tôi là - tại sao tất cả những giống nhau không? Trong Java SE, tôi nhận được:

en_US - 4/27/12 
en_GB - 27/04/12 
en_AU - 27/04/12 
en_NZ - 27/04/12 
en_ZA - 2012/04/27 

Tôi mong chờ điều gì. Tôi biết rằng tôi có thể sử dụng android.text.format.DateFormat để có được kết quả chính xác dựa trên vị trí hiện tại của người dùng và cài đặt ngày đặt hàng, nhưng điều đó không giải thích tại sao sử dụng java.text.DateFormat để nhận định dạng cho ngôn ngữ được lập trình cụ thể không trả lại kết quả phù hợp.

Bên cạnh đó, nó không chỉ là định dạng SHORT ngày - MEDIUMLONG chương trình mâu thuẫn giữa Android và Java SE cũng như (ví dụ: Android trả về định dạng tương tự cho tất cả 5 phá miền địa phương tôi đã chỉ định).

Tôi đã thử nghiệm trên 3 thiết bị khác nhau (2.3 và 4.0) và trên trình mô phỏng (2.3 và 4.0), tất cả đều có cùng kết quả. Tôi cũng đã thử nghiệm bằng cách sử dụng Locale.USLocale.UK chỉ để xem chúng có khác nhau không, nhưng kết quả cũng giống nhau.

Có ai khác chạy vào điều này hay biết tại sao điều này xảy ra?

UPDATE: 2012-07-18

Dường như đây là một vấn đề với giả lập, cũng như nhiều thiết bị được sản xuất tại Mỹ. Sử dụng Dalvik Explorer:

https://play.google.com/store/apps/details?id=org.jessies.dalvikexplorer&hl=en

tôi đã có thể để xem những gì lợi nhuận hệ thống cho en_GB trên các thiết bị khác nhau (bao gồm cả giả lập). Một số trả về các định dạng thích hợp, một số trả về định dạng en_US. Tôi cho rằng đây chỉ là vấn đề về các tài nguyên định dạng được tích hợp vào hệ điều hành cho từng thiết bị, mặc dù giả thiết giả lập trả về định dạng sai cũng như nhiều thiết bị do Mỹ sản xuất. nếu họ đã thấy vấn đề này.

Trả lời

1

thử điều này:

int style = DateFormat.MEDIUM; 
    //Also try with style = DateFormat.FULL and DateFormat.SHORT 
    Date date = new Date(); 
    DateFormat df; 
    df = DateFormat.getDateInstance(style, Locale.UK); 
    Log.d("Locale.UK","Locale.UK - "+df.format(date)); 
    System.out.println("United Kingdom: " + df.format(date)); 
    df = DateFormat.getDateInstance(style, Locale.US); 
    Log.d("Locale.US","Locale.US - "+df.format(date)); 
    df = DateFormat.getDateInstance(style, Locale.FRANCE); 
    Log.d("Locale.FRANCE","Locale.FRANCE - "+df.format(date)); 
    df = DateFormat.getDateInstance(style, Locale.ITALY); 
    Log.d("Locale.ITALY","Locale.ITALY - "+df.format(date)); 
    df = DateFormat.getDateInstance(style, Locale.JAPAN); 
    Log.d("Locale.JAPAN","Locale.JAPAN - "+df.format(date)); 
+0

Mặc dù đó là khá nhiều chính xác những gì tôi đang làm (với việc bổ sung các miền địa phương khác), tôi đã cho nó một shot. Các định dạng của Hoa Kỳ và Vương quốc Anh giống nhau: "ngày 27 tháng 4 năm 2012". Tôi mong đợi người Anh sẽ trở thành "27 tháng 4 năm 2012". Những người khác có vẻ hợp lệ, mặc dù tôi không phải người Pháp, người Ý, cũng không phải người Nhật, vì vậy tôi không chắc chắn 100%. ;-) – mWillis

+0

nhưng nếu bạn đang nhận được kết quả đúng thì hãy chuyển vị trí của bạn thành 'Locale.ITALY' thay vì là Locale mới (" vi "," GB "). –

+0

Như tôi đã nói trong câu hỏi, tôi đã sử dụng cả hai 'Locale.UK' và' locale mới ("vi", "GB") '- chúng giống nhau và cả hai đều trả về định dạng sai. 'Locale.ITALY' không nằm trong phạm vi của những gì tôi đang cố gắng xác định. – mWillis

4

Đây không phải là một câu trả lời (tôi chưa có đủ đại diện để thêm nhận xét ...)

Là một nhà phát triển Vương quốc Anh Tôi đã đi qua vấn đề này. Tôi thấy vấn đề này với Galaxy S3 của tôi, chính xác như bạn đã mô tả.

Tôi phải sử dụng để cho phép người dùng chọn định dạng ngày làm tùy chọn. Không tốt lắm.

Chương trình DalvikExplorer cũng cho thấy vấn đề:

enter image description here

+0

Cảm ơn bạn đã phản hồi! Đó là một vấn đề kỳ lạ, bởi vì tôi đã thấy các thiết bị khác trả về định dạng thích hợp cho en_GB. – mWillis

+0

Có thực sự. Tôi cũng đã thử với HTC Desire và hoạt động tốt. –

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