2011-10-05 8 views
5

मेरे पास टाइमज़ोन और उपयोगकर्ता का लोकेल है। अब मैं तारीख पैटर्न प्राप्त करना चाहता हूं।जावा में लोकेल के टाइमज़ोन से दिनांक पैटर्न कैसे प्राप्त करें

उदाहरण के लिए: उपयोगकर्ता का टाइमज़ोन पीएसटी और लोकेल यूएस और मैं जिस पैटर्न की अपेक्षा करता हूं वह है "एमएम/डीडी/वाईय" और यदि उपयोगकर्ता का टाइमज़ोन आईएसटी और लोकेल इंडिया है, तो पैटर्न मैं उम्मीद करता हूं कि "डीडी/एमएम/वाईय"

यह कैसे प्राप्त करें?

नोट: मैं पैटर्न को वास्तविक तिथि नहीं प्राप्त करना चाहता हूं ताकि मैं इसे किसी अन्य स्थान पर उपयोग कर सकूं।

+1

क्यों न केवल पैटर्न के बजाय "इस अन्य स्थान" में लोकेल का उपयोग क्यों करें? –

+0

हाय पेटल इवानोव, असल में, मैं पैटर्न को जावास्क्रिप्ट में पास करना चाहता हूं इसलिए मैं लोकेल का उपयोग नहीं कर सकता। –

उत्तर

1

वास्तव में आपको दिनांक पैटर्न के लिए TZ की आवश्यकता है? सामान्य तरीके स्थानीयकरण गुण फ़ाइल में लोकेल (या locale_country) के लिए डेटा पैटर्न है। मुझे लगता है कि यह पर्याप्त है।

+0

मुझे दिनांक पैटर्न के लिए टीजेड की आवश्यकता नहीं है।लेकिन आम तौर पर, मेरे हाथ में जो कुछ है (उपयोगकर्ता का टाइमज़ोन विवरण)। "सामान्य तरीके से लोकेल (या locale_country) के लिए स्थानीयकृत गुण फ़ाइल में डेटा पैटर्न होता है - इसका मतलब यह है कि देश स्तर पर दिनांक पैटर्न बनाए रखने का सबसे अच्छा तरीका है (और इसे डेटाबेस या फ़ाइल सिस्टम में सहेजना)? –

+0

हां, यह है। टीजेड को http अनुरोध से पुनर्प्राप्त नहीं किया जा सकता है, इसलिए आप केवल ग्राहक के लोकेल/देश को जानते हैं। दूसरी बात यह है कि उपयोगकर्ता को टीजेड उत्तर को बाकी उपयोगकर्ता जानकारी के साथ डेटाबेस में सहेजना है। – yoprogramo

3

Locale का अनुवाद कन्स्ट्रक्टर में sun.util.resources.LocaleData#getDateFormatData में किया गया है। यह विधि ResourceBundle प्रदान करती है जिसे तब चुना गया पैटर्न के आधार पर विशेष पैटर्न के लिए पूछताछ की जाती है।

दूसरे शब्दों में - दुर्भाग्यवश जेडीके कच्चे प्रारूपों तक पहुंचने के लिए एपीआई/एसपीआई प्रदान नहीं करता है। मेरी सलाह है कि Locale का उपयोग सभी के साथ और फ़ॉर्मेटिंग/पार्सिंग विधियों को पास करें।

+0

अपने स्वयं के स्वरूपण विधियों के लिए गुजरने वाले लोकेल के लिए +1, अंतिम लचीला समाधान – Dapeng

0

ऐसा लगता है कि आप डेटफॉर्मैट पर static getInstance methods चाहते हैं। वे शैली (लघु, लंबा, आदि) के लिए एक पूर्णांक स्थिरांक लेते हैं, और वैकल्पिक रूप से एक अलग लोकेल (JVM के डिफ़ॉल्ट के बजाय)।

0

आप उपयोग कर सकते Interface Map

कश्मीर लोकेल हो जाएगा वी तारीख पैटर्न के साथ एक स्ट्रिंग होगा

0

आप Joda समय उपयोग कर रहे हैं (और क्यों नहीं होगा कि आप किसी भी अगर आपके पास विकल्प यह लगभग JDK 1.7 में बंडल गया) आप कुछ इस तरह कर सकता है:?

String patternForStyleAndLocale = org.joda.time.format.DateTimeFormat.patternForStyle("S-", locale); 

जो दुर्भाग्य से केवल एक दो अंकों साल देता है। उस के लिए एक काम के आसपास होगा:

if (!org.apache.commons.lang.StringUtils.contains(patternForStyleAndLocale, "yyyy")) 
{ 
    // The default Joda pattern only has a two digit year for US and Europe, China etc - but we want four digit years 
    patternForStyleAndLocale = StringUtils.replace(patternForStyleAndLocale, "yy", "yyyy"); 
} 

और आप उन्हें एक ConcurrentHashMap<Locale, String> में कैशिंग विचार कर सकते हैं।

"dd MMM yyyy" // UK: "25 Dec 2010" FRANCE: "25 déc. 2010" etc.. 
:

इस तरह एक पूर्व स्थानीय पैटर्न के रूप में एक अंकीय तिथि करने के बारे में अच्छी बात यह है कि यह किसी भी आगे स्थानीयकरण बाद में की आवश्यकता नहीं है, अगर आप इस तरह के रूप में एक पद्धति का उपयोग कर रहे थे के रूप में यह करना होगा है

हालांकि ... मैंने आपकी बाद की टिप्पणी से अभी देखा है कि आप जावास्क्रिप्ट को पैटर्न पास करना चाहते हैं - जेएस जावा में विभिन्न पैटर्न स्वरूपण का उपयोग करने के बाद से बहुत मुश्किल हो सकता है (उदाहरण के लिए आईएसओ दिनांक "yyyy-MM-dd" जावा में और "yy-mm-dd" में जे एस)। मैंने इसे हल करने का प्रयास नहीं किया है, लेकिन मैं जावा पैटर्न से जेएस तक बस मैप करने के लिए जेएस या जावा में कुछ स्ट्रिंग मैपिंग का उपयोग करता हूं। आपको निश्चित रूप से प्रत्येक भाषा के लिए सामना करने वाले प्रत्येक पैटर्न को जानना होगा।