2011-03-02 9 views
7

मैं अक्सर लोकेल स्वतंत्र रूप से आउटपुट तिथियों के लिए HH:mm:ss या yyyy-MM-dd जैसे पैटर्न के साथ SimpleDateFormat बना देता हूं। चूंकि एक अतिरिक्त लोकेल पैरामीटर लेने वाला एक कन्स्ट्रक्टर भी है, इसलिए मुझे आश्चर्य है कि ऐसे मामले हैं जहां ऐसे प्रारूप लोकेल आश्रित हो सकते हैं, या यदि मुझे हमेशा Locale.ENGLISH या Locale.GERMANY निर्दिष्ट करना चाहिए। आइए मान लें कि टाइमज़ोन स्पष्ट रूप से सेट है।लोकल निर्भर कैसे सरलडेटफॉर्मेट है?

उत्तर

15

बस लोकेल पर getAvailableLocales स्थिर विधि पाया, और यह पता चला है सब एक कैलेंडर के क्षेत्र लोकेल निर्भर हो सकता है कि:

public static void main(String[] args) { 
    String pattern = "yyyy-MM-dd HH:mm:ss"; 
    Date date = new Date(); 
    String defaultFmt = new SimpleDateFormat(pattern).format(date); 

    for (Locale locale : Locale.getAvailableLocales()) { 
     String localeFmt = new SimpleDateFormat(pattern, locale).format(date); 
     if (!localeFmt.equals(defaultFmt)) { 
      System.out.println(locale + " " + localeFmt); 
     } 
    } 
} 

अपने सिस्टम पर (जर्मनी में ubuntu के अंग्रेज़ी संस्करण चला

ja_JP_JP 23-03-03 16:53:09 
hi_IN २०११-०३-०३ १६:५३:०९ 
th_TH 2554-03-03 16:53:09 
th_TH_TH ๒๕๕๔-๐๓-๐๓ ๑๖:๕๓:๐๙ 

तो Japan और Thailand एक अलग युग लेकिन ar का उपयोग करें:) इस निम्न सूची आउटपुट, आशा यूनिकोड चरित्र बरकरार के माध्यम से आ की सुविधा देता है ई अन्यथा gregorian calendar पर आधारित है, जो बताता है कि महीने और दिन समान क्यों हैं।

अन्य लोकल भी संख्या लिखने के लिए अलग-अलग स्क्रिप्ट का उपयोग करते हैं, उदाहरण के लिए Hindi भारत में बोली जाती है और थाईलैंड में थाई का एक संस्करण है।

प्रश्न का उत्तर देने के लिए, लोकेल को किसी ज्ञात मूल्य पर निर्दिष्ट किया जाना चाहिए जब लोकेल स्वतंत्र स्वतंत्र स्ट्रिंग की आवश्यकता होती है।

संपादित करें: जावा 1.6 ने एक भाषा/देश तटस्थ लोकेल निर्दिष्ट करने के लिए निरंतर Locale.ROOT जोड़ा। कंप्यूटर पर लक्षित आउटपुट के लिए अंग्रेजी लोकेल को निर्दिष्ट करना पसंद किया जाएगा।

रूट लोकेल लोकेल है जिसका भाषा, देश और संस्करण खाली ("") तार हैं। इसे सभी लोकेशंस के आधार लोकेल के रूप में माना जाता है, और लोकेल संवेदनशील संचालन के लिए भाषा/देश तटस्थ लोकेल के रूप में उपयोग किया जाता है।

4

हां, SimpleDateFormat बिल्कुल लोकेल-संवेदनशील है। कुछ फ़ील्ड, जैसे घंटे और मिनट, लोकेल-स्वतंत्र हैं।

SimpleDateFormat भी स्थानीय दिनांक और समय पैटर्न तार का समर्थन करता है। इन तारों में, ऊपर वर्णित पैटर्न अक्षरों को अन्य, लोकेल आश्रित, पैटर्न अक्षरों के साथ प्रतिस्थापित किया जा सकता है। SimpleDateFormat पैटर्न अक्षरों के अलावा पाठ के स्थानीयकरण से निपटता नहीं है; यह वर्ग के ग्राहक के लिए है।

या, आप के बाद से, बजाय स्थानीयकरण के अनुकूल DateFormat#getDateInstance() कारखाने विधि का उपयोग कर सकते हैं:

public SimpleDateFormat(String pattern, Locale locale)

दिए गए पैटर्न और दिए गए स्थान के लिए प्राथमिक दिनांक फॉर्मेट प्रतीकों का प्रयोग कर एक SimpleDateFormat निर्माणों । नोट: यह कन्स्ट्रक्टर सभी लोकेशंस का समर्थन नहीं कर सकता है। पूर्ण कवरेज के लिए, DateFormat कक्षा में फैक्ट्री विधियों का उपयोग करें।

+0

मैं पैटर्न जो किसी भी महीने शामिल नहीं है या के बारे में पूछ रहा हूँ दिन के नाम, उदाहरण के लिए 'yyyy-MM-dd', और मैं लोकेल स्वतंत्रता आउटपुट चाहता हूं, संभवतः लोकेल पैरामीटर को छोड़कर कुछ कीस्ट्रोक को सहेजना चाहता हूं। –

+0

@ जोर्न: आह! उस विशिष्ट उदाहरण में, आपको अतिरिक्त पैरामीटर को छोड़ने में कोई समस्या नहीं होनी चाहिए। समय क्षेत्र प्रारूपण एक अलग कहानी हो सकती है, यद्यपि। फिर भी, आप जावा को लोकेल-विशिष्ट प्रारूपों के बारे में चिंता करने से बेहतर हो सकते हैं (उदाहरण के लिए, 'mm/dd/yyyy' बनाम 'dd/mm/yyyy'' का उपयोग करने का निर्णय लेना)। –

+1

मैंने हमेशा एक लोकेल निर्दिष्ट करने की आदत ली है (कम से कम जब एप्लिकेशन क्लाइंट एप्लिकेशन नहीं है जहां सिस्टम लोकेल हमेशा उपयोग किया जाता है), यह सुनिश्चित करने के लिए कि मैं (या कोई और) एक निर्दिष्ट करना न भूलें पैटर्न को बदलना पड़ा। नियमों की तरह थोड़ा हमेशा ब्लॉकों के चारों ओर घुंघराले ब्रैकेट का उपयोग करने के लिए, भले ही इसमें केवल एक पंक्ति हो। –

0

यह मेरे लिए काम करता है, हो सकता है आप इसे बाहर की कोशिश करनी चाहिए:

String time = new SimpleDateFormat("HH:mm:ss").format(new Date());

कंसोल आउटपुट:

11:52:45 
संबंधित मुद्दे