मेरे पास एक छोटा एंड्रॉइड एप्लिकेशन है जिसका उपयोग मैं लोकेल के आधार पर विभिन्न प्रारूपों में एक विशिष्ट दिनांक मुद्रित करने के लिए कर रहा हूं।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 प्रारूप वापस करते हैं। मुझे लगता है कि यह केवल एक मुद्दा है कि प्रत्येक डिवाइस के लिए ओएस में किस प्रारूप संसाधनों का निर्माण किया गया है, हालांकि एमुलेटर गलत स्वरूपों के साथ-साथ मेरे कई यूएस-निर्मित उपकरणों को लौटाता है, मुझे आश्चर्य है कि ब्रिटिश डेवलपर्स क्या सोचते हैं, या अगर उन्होंने यह समस्या देखी है।
हालांकि कि काफी वास्तव में क्या मैं (अन्य स्थानों के अलावा के साथ) कर रहा हूँ, मैं इसे एक शॉट दे दी है। यूएस और यूके प्रारूप समान हैं: "27 अप्रैल, 2012"। मैं यूके को "27 अप्रैल 2012" होने की उम्मीद करता हूं। अन्य मान्य दिखाई देते हैं, हालांकि मैं न तो फ्रेंच, इतालवी, न ही जापानी हूं, इसलिए मैं 100% निश्चित नहीं हूं। ;-) – mWillis
लेकिन यदि आपको सही परिणाम मिल रहे हैं तो नए लोकेल ("एन", "जीबी") के बजाय अपना स्थान 'लोकेल.आईटाली' के रूप में पास करें। –
जैसा कि मैंने इस सवाल में कहा है, मैंने 'लोकेल.यूके' और 'नया लोकेल ("एन", "जीबी") दोनों का उपयोग किया है - वे दोनों समान हैं, और वे दोनों गलत प्रारूप लौटाते हैं। 'Locale.ITALY' जो मैं निर्धारित करने की कोशिश कर रहा हूं उसके दायरे में नहीं है। – mWillis