2008-10-21 10 views
5

विभिन्न लोकेल का समर्थन करने वाले जावा एप्लिकेशन का निर्माण करना, लेकिन पूर्ण, लंबे, मध्यम, और लघु तिथिफॉर्मैट विकल्पों के बीच उपलब्ध होने से परे डेटफॉर्मैट डिस्प्ले को कस्टमाइज़ करना चाहते हैं। कम से कम अंग्रेजी के लिए DateFormat.getDateTimeFormat(), AM/PM, आदि को कम करने के दिनांक और समय घटकों के बीच एक चरित्र रखने जैसी चीजों को करना चाहते हैं।विभिन्न लोकेल के लिए java.text स्वरूपण को अनुकूलित करना

1) यदि लोकेल अंग्रेज़ी है, एक नया SimpleDateFormat वस्तु पर अपने कस्टम प्रारूप स्ट्रिंग का उपयोग करें:

यह करने के लिए 3 तरीके के बारे में सोच सकते हैं।

2) मौजूदा स्थानों

3) एक नए स्थान के संस्करण निर्दिष्ट करता है कि प्रारूप तार मैं

चाहते बनाने के लिए डिफ़ॉल्ट प्रारूप तार को संशोधित

कैसे करना है पता नहीं कर सकते हैं 2 या 3 (या यदि यह भी संभव है), और 1 ऐसा नहीं करेगा ... क्या किसी ने इससे पहले इस तरह से निपटाया है?

भी, ऐसा लगता है कि एएम/पीएम को कम करने के लिए 2 या 3 आवश्यक होंगे? (लोकेल की डेटफॉर्मेट सेटिंग्स के लिए एएमपीएममार्कर संसाधन निर्दिष्ट करना)

उत्तर

0

एकमात्र चीज जिस तरह से मैंने निपटाया है, यह तथ्य है कि "स्ट्रेटटाइम" और "लोकेल" का कहना है कि इतालवी को समय फ़ील्ड के बीच कोलन का उपयोग करना चाहिए, लेकिन जावा पूर्ण उनके बीच -स्टॉप। तो मैंने निम्नलिखित कोड जोड़ा है:

// This is an incredibly ugly hack, but it's based on the fact that 
    // Java for some reason decided that Italy uses "." between 
    // hours.minutes.seconds, even though "locale" and strftime say 
    // something different. 
     hmsTimeFormat = DateFormat.getTimeInstance(DateFormat.MEDIUM); 
     if (hmsTimeFormat instanceof SimpleDateFormat) 
     { 
     String str = ((SimpleDateFormat)hmsTimeFormat).toPattern(); 
     str = str.replace('.', ':'); 
     hmsTimeFormat = new SimpleDateFormat(str); 
     } 
1

इसके बजाय संदेशफॉर्मैट का उपयोग क्यों नहीं करें?

अपनी इच्छित चीज़ों को करने के लिए "{0, दिनांक, छोटा}" यहां अपना टेक्स्ट {0, दिनांक, छोटा} "पैटर्न का उपयोग करें।

SimpleDateFormat sdf = (SimpleDateFormat)sdf.getDateTimeInstance(DateTime.SHORT,DateTime.SHORT, locale); 
if (formatString != null) { 
    sdf = new SimpleDateFormat(formatString); 
} 
if (am!= null && pm != null) { 
    DateFormatSymbols symbols = sdf.getDateFormatSymbols(); 
    symbols.setAmPmStrings(new String[]{am, pm}); 
    sdf.setDateFormatSymbols(symbols); 
} 

पॉल:: यकीन नहीं वहाँ एक विभाजक है

+2

पढ़ सकता है क्योंकि कभी कभी यह होना चाहिए "{0, समय, लघु} अपने यहां पाठ {0, तारीख, लघु}", पर निर्भर करता है लोकेल। –

0

इस है कि हम समझ गए होंगे हल करने के लिए सबसे संतोषजनक रास्ता स्ट्रिंग्स बजे बजे लोड करने के लिए, एक भाषा-विशिष्ट संसाधन बंडल से formatString, और उसके बाद है डेटफॉर्मैट सिंबल में, हालांकि ... आपको शायद str.replace

0

रखने की आवश्यकता है, मैं आपकी दिनांक स्वरूपण के लिए Joda Time का उपयोग करने की अनुशंसा करता हूं। इसकी स्वरूपण में शक्तिशाली लेकिन सुरुचिपूर्ण लचीलापन है। आपको शायद पता चलेगा कि इसके स्वरूपक जो आप बेहद सरल करना चाहते हैं।

बीटीडब्ल्यू: एक बार जब आप जोडा जाएंगे तो आप कभी वापस नहीं जाएंगे!

1

जावा के लिए सिर्फ कक्षा है, यह ResourceBundle कक्षा है। Back यह एक गुण फ़ाइल के साथ है और आपके पास वह सब कुछ है जो आपको और अधिक चाहिए।

संसाधनबंडल कक्षा के बिना भी आप सभी SimpleDateFormat प्रारूपों को पकड़ने के लिए properties फ़ाइलों का उपयोग कर सकते हैं।

Settings formats = new Settings(); 
Properties SDFFormats = formats.load(propertiesFile); 

String SDFAmerica = SDFFormats.getProperty("FormatAmerica"); 

गुण फ़ाइल में प्रवेश

FormatAmerica = MMM-dd-yyyy 
संबंधित मुद्दे