2016-07-15 9 views
7

पैदा करता है मैं अपने कोड में मैं appendValue तरीकों का उपयोग कर यह निर्दिष्ट किया है पैटर्न "ddMMyy" है:Java8 appendPattern appendValue तरीके से परिभाषित पैटर्न बनाम अलग परिणाम

DateTimeFormatter dateTimeFormatter = new DateTimeFormatterBuilder() 
        .appendValue(ChronoField.DAY_OF_MONTH, 2) 
        .appendValue(ChronoField.MONTH_OF_YEAR, 2) 
        .appendValue(ChronoField.YEAR_OF_ERA, 2) 
        .toFormatter(); 
System.out.println(LocalDate.parse("100199", dateTimeFormatter)); 

हालांकि इस का उत्पादन "0099" वर्ष के लिए:

0099-01-10

तो मुझे लगता है कि इस तरह appendPattern उपयोग करने के लिए बदलने के लिए:

DateTimeFormatter dateTimeFormatter = new DateTimeFormatterBuilder() 
        .appendPattern("ddMMyy") 
        .toFormatter(); 
System.out.println(LocalDate.parse("100199", dateTimeFormatter)); 

मेरे पास सदी के साथ वर्ष "20 99" के लिए सही परिणाम है।

2099-01-10

कोड मेरे लिए बराबर लगता है कारण है कि यह एक ही परिणाम का उत्पादन नहीं कर रहा है? पहली बार शताब्दी क्यों लापता है?

उत्तर

6

appendValue साल के रूप में यह आगे हेरफेर के बिना पारित कर दिया है किया जा रहा लेता है क्योंकि - अपने मामले 99

आप एक "आधार वर्ष" से शुरू करने के लिए चाहते हैं, का कहना है कि 2000 में, और कहा कि आधार वर्ष को जोड़ने के मूल्य (2099 प्राप्त करने के लिए) आप appendValueReduced बजाय का उपयोग कर सकते हैं: के रूप में the javadoc में विस्तृत

DateTimeFormatter dateTimeFormatter = new DateTimeFormatterBuilder() 
     .appendValue(ChronoField.DAY_OF_MONTH, 2) 
     .appendValue(ChronoField.MONTH_OF_YEAR, 2) 
     .appendValueReduced(ChronoField.YEAR_OF_ERA, 2, 2, LocalDate.of(2000, 1, 1)) 
     .toFormatter(); 

आप yy पैटर्न का उपयोग करते हैं, तो आप डिफ़ॉल्ट रूप से उस व्यवहार मिलता है:

वर्ष: अक्षरों की गिनती न्यूनतम फ़ील्ड चौड़ाई निर्धारित करती है जिसके नीचे पैडिंग का उपयोग किया जाता है। यदि अक्षरों की गिनती दो है, तो कम दो अंकों का फॉर्म उपयोग किया जाता है। प्रिंटिंग के लिए, यह लगभग दो अंक आउटपुट करता है। पार्सिंग के लिए, यह 2000 के मूल मूल्य का उपयोग करके विश्लेषण करेगा, जिसके परिणामस्वरूप वर्ष 2000 से 20 99 तक के क्षेत्र में एक वर्ष होगा। [...]

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