2012-04-27 10 views
10

मेरे पास एक छोटा एंड्रॉइड एप्लिकेशन है जिसका उपयोग मैं लोकेल के आधार पर विभिन्न प्रारूपों में एक विशिष्ट दिनांक मुद्रित करने के लिए कर रहा हूं।java.text.DateFormat एंड्रॉइड पर en_US और en_GB के लिए एक ही दिनांक प्रारूप क्यों देता है?

यहाँ मेरी कोड (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())); 
} 

LogCat में इस से उत्पादन किया जाता है इस प्रकार:

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 

तो मेरे सवाल है - क्यों इन सब एक ही कर रहे हैं? जावा एसई में मुझे मिलता है:

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 

मुझे उम्मीद है कि मैं क्या उम्मीद करूंगा। मुझे पता है कि मैं उपयोगकर्ता के वर्तमान लोकेल और डेट ऑर्डर सेटिंग के आधार पर सही परिणाम प्राप्त करने के लिए android.text.format.DateFormat का उपयोग कर सकता हूं, लेकिन यह समझा नहीं जाता है कि प्रोग्रामेटिक रूप से निर्दिष्ट लोकेल के प्रारूप को प्राप्त करने के लिए java.text.DateFormat का उपयोग क्यों करें, सही परिणाम नहीं लौटाते हैं।

इसके अतिरिक्त, यह सिर्फ SHORT दिनांक स्वरूप नहीं है - MEDIUM और LONG Android और जावा SE के बीच शो विसंगतियों के साथ-साथ (अर्थात Android सभी 5 स्थलों मैं निर्दिष्ट के लिए इसी स्वरूप देता है)।

मैंने इसे 3 अलग-अलग उपकरणों (2.3 और 4.0) और एम्यूलेटर (2.3 और 4.0) पर परीक्षण किया है, सभी एक ही परिणाम के साथ। मैंने Locale.US और Locale.UK का उपयोग करके परीक्षण किया है कि वे किसी भी तरह से अलग हैं या नहीं, लेकिन परिणाम समान हैं।

क्या कोई और इसमें भाग लेता है, या पता है कि यह क्यों होगा?

अद्यतन: 2012-07-18

ऐसा लगता है कि इस एमुलेटर के साथ कोई समस्या है, साथ ही कई उपकरणों अमेरिका में निर्मित है। Dalvik एक्सप्लोरर का उपयोग करना:

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

मैं विभिन्न उपकरणों पर en_GB के लिए प्रणाली रिटर्न (एमुलेटर सहित) क्या देखने के लिए सक्षम किया गया है। कुछ उचित प्रारूपों को वापस करते हैं, कुछ en_US प्रारूप वापस करते हैं। मुझे लगता है कि यह केवल एक मुद्दा है कि प्रत्येक डिवाइस के लिए ओएस में किस प्रारूप संसाधनों का निर्माण किया गया है, हालांकि एमुलेटर गलत स्वरूपों के साथ-साथ मेरे कई यूएस-निर्मित उपकरणों को लौटाता है, मुझे आश्चर्य है कि ब्रिटिश डेवलपर्स क्या सोचते हैं, या अगर उन्होंने यह समस्या देखी है।

उत्तर

1

इस प्रयास करें:

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

हालांकि कि काफी वास्तव में क्या मैं (अन्य स्थानों के अलावा के साथ) कर रहा हूँ, मैं इसे एक शॉट दे दी है। यूएस और यूके प्रारूप समान हैं: "27 अप्रैल, 2012"। मैं यूके को "27 अप्रैल 2012" होने की उम्मीद करता हूं। अन्य मान्य दिखाई देते हैं, हालांकि मैं न तो फ्रेंच, इतालवी, न ही जापानी हूं, इसलिए मैं 100% निश्चित नहीं हूं। ;-) – mWillis

+0

लेकिन यदि आपको सही परिणाम मिल रहे हैं तो नए लोकेल ("एन", "जीबी") के बजाय अपना स्थान 'लोकेल.आईटाली' के रूप में पास करें। –

+0

जैसा कि मैंने इस सवाल में कहा है, मैंने 'लोकेल.यूके' और 'नया लोकेल ("एन", "जीबी") दोनों का उपयोग किया है - वे दोनों समान हैं, और वे दोनों गलत प्रारूप लौटाते हैं। 'Locale.ITALY' जो मैं निर्धारित करने की कोशिश कर रहा हूं उसके दायरे में नहीं है। – mWillis

4

यह एक जवाब (मैं अभी तक कोई टिप्पणी जोड़ने के लिए पर्याप्त प्रतिनिधि नहीं है ...)

ब्रिटेन एक डेवलपर मैं इस समस्या का सामना करना है के रूप में नहीं है। जैसा कि आपने वर्णन किया है, मैं अपने गैलेक्सी एस 3 के साथ इस समस्या को देख रहा हूं।

मुझे उपयोगकर्ता को दिनांक प्रारूप को वरीयता के रूप में चुनने की अनुमति देने का सहारा लेना है। बहुत अच्छा नहीं।

DalvikExplorer कार्यक्रम भी समस्या दिखाता है:

enter image description here

+0

प्रतिक्रिया के लिए धन्यवाद! यह एक अजीब मुद्दा है, क्योंकि मैंने अन्य उपकरणों को देखा है जो en_GB के लिए उपयुक्त स्वरूपण लौटाते हैं। – mWillis

+0

हां वास्तव में। मैंने एक एचटीसी डिजायर के साथ भी कोशिश की है और यह ठीक काम करता है। –

संबंधित मुद्दे