2015-03-09 5 views
13

मेरे प्रश्न से संबंधित here - मैं pattern स्ट्रिंग को DateTimeFormatter दिए गए स्ट्रिंग को कैसे प्राप्त करूं?मूल पैटर्न प्राप्त करें स्ट्रिंग को जेडीके 8 डेटटाइमफॉर्मेटर दिया गया है?

+1

@ केविन वर्कमैन संभावित रूप से डुप्लिकेट नहीं है, क्योंकि यह जेडीके 8 डेटटाइमफॉर्मेटर क्लास के बारे में है, जोडा टाइम क्लास – bowmore

+0

@bowmore नहीं है जेडीके 8 डेटटाइमफॉर्मेटर क्लास जोडाटाइम डेटटाइमफॉर्मेटर क्लास से बाहर था। उस प्रश्न का उत्तर इस प्रश्न का उत्तर है। –

+2

@ केविन वर्कमैन जो एक दूसरे को प्रेरित करता है, उन्हें समान नहीं बनाता है। उनका व्यवहार विभिन्न तरीकों से अलग है। फिर भी, जबकि उत्तर समान हो सकते हैं, सवाल एक डुप्लिकेट नहीं है, क्योंकि सवाल पूछने वाले दोनों को दोनों के बीच संबंधों से अनजान हो सकता है। – bowmore

उत्तर

7

यह on the mailing list से पूछा गया है और उत्तर यह है कि यह संभव नहीं है क्योंकि मूल पैटर्न को बनाए रखा नहीं गया है।

एक ही थ्रेड DateTimeFormatterBuilder का उपयोग करने का सुझाव देता है जिसमें जानकारी है।

+0

मुझे लगता है कि 'डेटटाइमफॉर्मेटरबिल्डर' स्थानीय प्रारूप बनाने की अनुमति देता है, लेकिन अगर मैं गलत नहीं हूं, तो 'डेटटाइमफॉर्मेटर' ऑब्जेक्ट बनाने के लिए उपयोग किए जाने वाले सटीक प्रारूप को बिल्कुल सही नहीं देता है। –

+0

@ रोहितजैन शायद यह मामला है - जावाडोक मूल पैटर्न को वापस देने का वादा नहीं करता है। – assylias

1

यह आपके प्रश्न का सीधा जवाब नहीं हो सकता है लेकिन इससे मदद मिल सकती है।

आप यह कैसे फ़ॉर्मेटर निर्माण किया गया था आप स्थिर विधि कॉल कर सकते हैं के मापदंडों जानते हैं:

DateTimeFormatterBuilder.getLocalizedDateTimePattern(FormatStyle dateStyle, FormatStyle timeStyle, Chronology chrono, Locale locale)

यह आपको एक स्ट्रिंग के रूप में पैटर्न दे देंगे।

+0

या अधिक सरल: '((SimpleDateFormat) DateFormat.getDateInstance (DateFormat.SHORT, Locale.FRENCH))। ToPattern()' – qwertzguy

2

एक सीधा या सुरुचिपूर्ण समाधान नहीं है, लेकिन DateTimeFormatter की .toString() विधि के परिणामों का उपयोग करके, संभवतः स्ट्रिंग को पार करने और मूल पैटर्न को पुनर्निर्मित करने वाला अपना कोड रोल करना संभव हो सकता है।

कुछ कोड है कि कुछ ही .toString() परिणाम विभिन्न पैटर्न के लिए प्रिंट:

java.time.format.DateTimeFormatter variousFormatPatterns = 
    java.time.format.DateTimeFormatter.ofPattern("yy MM dd"); 
System.out.println("Test 1: " + variousFormatPatterns.toString()); 

variousFormatPatterns = java.time.format.DateTimeFormatter.ofPattern("yy-MM-dd"); 
System.out.println("\nTest 2: " + variousFormatPatterns.toString()); 

variousFormatPatterns = java.time.format.DateTimeFormatter.ofPattern("yyMMdd"); 
System.out.println("\nTest 3: " + variousFormatPatterns.toString()); 

variousFormatPatterns = java.time.format.DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss"); 
System.out.println("\nTest 4: " + variousFormatPatterns.toString()); 

परिणाम (अंतरिक्ष/हाइफन/स्लैश/पेट के सीमांकक वर्ण की अवधारण पर ध्यान दें):

टेस्ट 1: घटाया वैल्यू (वर्षऑफ्रा, 2,2,2000-01-01) 'मूल्य (महीनाऑफियर, 2)' मूल्य (डेऑफमोन्थ, 2)

टेस्ट 2: कम किया गया वाल्यू (वर्षऑफ्रा, 2,2,2000-01-01) '-' वैल्यू (महीनाऑफियर, 2) '-' वैल्यू (डेऑफमोन्थ, 2)

टेस्ट 3: ReducedValue (YearOfEra, 2,2,2000-01-01) मूल्य (MonthOfYear, 2) मूल्य (DayOfMonth, 2)

टेस्ट 4: मूल्य (MonthOfYear, 2) '/' मूल्य (DayOfMonth, 2) '/' मूल्य (YearOfEra, 4,19, EXCEEDS_PAD) '' मूल्य (HOUROFDAY, 2) ':' मूल्य (MinuteOfHour, 2) ':' मूल्य (SecondOfMinute, 2)

इस दृष्टिकोण को कार्यान्वित करने के लिए java.time.format.DateTimeFormatterBuilder में कोड का अध्ययन करने की आवश्यकता होगी। appendPattern(String pattern) विधि के लिए जावाडॉक विशेष रूप से उपयोगी प्रतीत होता है। यदि आप जानते हैं कि आप केवल कुछ प्रकार के पैटर्न के साथ काम कर रहे हैं तो आप कुछ शॉर्टकट ले सकते हैं।

DateTimeFormatterBuilder कोड के माध्यम से एक नज़र ले रहा है, वहाँ की संभावना एक जोखिम स्ट्रिंग्स जैसे Value, ReducedValue, Fraction, आदि भविष्य जावा संस्करणों में सूचना के बिना परिवर्तन कर सकता है के रूप में समाधान के इस प्रकार पर निर्भर होगा।

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