2015-09-21 3 views
5

मैं स्ट्रिंग्स से और उसके लिए कक्षा java.time.Instant के उदाहरणों को परिवर्तित करना चाहता हूं।ISO_INSTANT डेटटाइमफॉर्मेटर का एक कस्टम संस्करण कैसे बनाएं जो कॉलन का उपयोग नहीं करता है?

मैं एक प्रारूप का उपयोग करना चाहता हूं जैसे java.time.format.DateTimeFormatter.ISO_INSTANT एकमात्र अंतर के साथ कि प्रारूप में कोलन छोड़े गए हैं या डॉट्स द्वारा प्रतिस्थापित किए गए हैं ताकि उन्हें फ़ाइल नामों और यूआरएल में भागने के बिना उपयोग किया जा सके।

उदाहरण: 2011-12-03T10.15.30.001Z बजाय 2011-12-03T10 की: 15: 30.001Z

ISO_INSTANT के लिए जावाडोक देखें: https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#ISO_INSTANT

+0

यह शायद मामूली नहीं है, क्योंकि ISO_INSTANT java.time.format.DateTimeFormatterBuilder.InstantPrinterParser का उपयोग करता है और कोलन वहां हार्डकोड किया जाता है। – Gustave

+3

आप हमेशा मामला 'input.replace ("।", ":");' ... यह शायद जटिल दिनांक समय स्वरूपक के रूप में अच्छा है। – assylias

+0

हां, यह व्यावहारिक लेकिन बहुत ही सुरुचिपूर्ण समाधान है जिसका उपयोग मैं अब तक कर रहा हूं जब तक कि मुझे कुछ बेहतर न लगे। – Gustave

उत्तर

1

आप इस तरह अपने खुद के फ़ॉर्मेटर बना सकते हैं :

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH.mm.ss.SSSVV") 

DateTimeFormatter जावाडोक सूचियों उनकी सार्थकता के साथ सभी संभव टोकन।

+0

मुझे लगता है कि यह पर्याप्त नहीं है, क्योंकि ISO_INSTANT हमेशा यूटीसी का उपयोग करता है और यदि आवश्यक नहीं है तो कोई अंशकालिक सेकंड नहीं है। – Gustave

+1

डेटटाइमफॉर्मेटर.ओपटरर्न ("yyyy-MM-dd'T'HH.mm.ss.SSSV") java.lang फेंकता है ILlegalArgumentException: पैटर्न अक्षर गणना 2 होना चाहिए: वी – Gustave

+2

डेटटाइमफॉर्मेटर.ओपटरर्न ("yyyy-MM-dd ' T'HH.mm.ss.SSSVV ")। प्रारूप (Instant.EPOCH) java.time.temporal.UnsupportedTemporalTypeException उत्पन्न करता है: असमर्थित फ़ील्ड: YearOfEra – Gustave

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