2015-05-22 4 views
6

ऐसा क्यों होता है? माह और दिन के लिए, मुझे लगता है कि जावा पिछले वैध माह और दिन यह सोचते है, लेकिन मुझे समझ नहीं आता क्यों साल है 2.जावा getDate 0000/00/00 अजीब मूल्य

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); 
Date result = sdf.parse("0000/00/00"); 

System.out.println(result.toString()); 

आउटपुट है:

Sun Nov 30 00:00:00 GMT 2 
+3

उलझन में आप क्या करने की कोशिश कर रहे हैं क्या ... –

+4

@AliGajani शायद एक _famous_ सवाल – radimpe

+8

कचरा बाहर कचरा पूछने की उम्मीद कर रहा है। – aioobe

उत्तर

14

ग्रेगोरियन कैलेंडर के रूप में दिखाया गया है नहीं है साल 0.

वर्ष 0 1BCE से मेल खाती है (आम युग, यह भी ईसा पूर्व के रूप में जाना से पहले)।

क्योंकि आप दिन के लिए 0 और दिन के लिए 0 की आपूर्ति करते हैं, यह पिछले महीने और पिछले वर्ष में वापस आता है।

आईई। 30-नवंबर-0002 ईसा पूर्व।

Date#toString में बीसीई/सीई प्रत्यय शामिल नहीं है। अधिकांश मामलों में यह अनिवार्य होगा।

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

4

शुरुआती के लिए बिंदु 1, महीना - - जनवरी और दिनांक - 1

आप इनपुट क्या दे दिया है है 00000000

स्टेशन विल दिनांक 00010101 Ei वर्ष होगा महीने के साथ आर टी - 00 का मतलब है Jan - 1 यानी दिसम्बर

दिवस 00 मतलब 1 Dec - 1 यानी 30th Nov

यह आउटपुट के 1 हिस्सा बताते हैं। Sun Nov 30 00:00:00 GMT

वर्ष 00 दिया गया है जिसका मतलब वर्ष 1 शून्य 1 है। यानी 1 बीसी और वर्ष के रूप में महीने के लिए एक और बार वापस रोल और इसकी 2 ईसा पूर्व की तारीख।

इसलिए साल 2.

4

डिफ़ॉल्ट रूप से SimpleDateFormat गलत इनपुट को पार्स करने का प्रयास करता है।

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); 
sdf.setLenient(false); 
Date result = sdf.parse("0000/00/00"); 

इस तरह आप एक अपवाद है जो शायद अपने मामले में और अधिक उपयुक्त है होगा:: आप setLenient विधि का उपयोग बंद कर सकते हैं

Exception in thread "main" java.text.ParseException: Unparseable date: "0000/00/00" 
    at java.text.DateFormat.parse(DateFormat.java:366) 
    at Snippet.main(Snippet.java:11) 
संबंधित मुद्दे