2015-07-30 5 views
9

मेरे पास एक जावा कोड है, जो एक विशिष्ट प्रारूप में तारीख को इनपुट करता है।SimpleDateFormat.parse एक अवैध दिनांक स्ट्रिंग क्यों स्वीकार करता है?

static Date parseDate(String userInput){ 
     DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     Date date = null; 
     try { 
      date = format.parse(userInput); 
      System.out.println(date); 
     }catch(ParseException pe){ 
      date=null; 
      System.out.println("Not a valid date"); 
     } 
     return date; 
    } 

अब मैं 2015-13-11 89:90:90 जो एक अमान्य दिनांक है में प्रवेश कर रहा हूँ। लेकिन यह तिथि के रूप में Thu Jan 14 18:31:30 IST 2016 देता है। ऐसा क्यों है? मैं तारीख के रूप में इसे वापस करने के लिए कैसे कर सकता हूँ?

अपने DateFormat वस्तु के प्रारंभ के बाद इस लाइन

format.setLenient(false); 

जोड़ना:

+0

ठीक है, मुझे याद आया कि आप इसे उद्देश्य पर गलत दर्ज कर रहे थे;) – DigitalNinja

उत्तर

14

javadocs की एक नज़र से, यह पार्स की एक lenient मोड जिसमें यह खराब इनपुट स्वरूपित स्वीकार का उपयोग कर किया जा रहा है इसे ठीक करने के लिए प्रतीत होता है।

+0

इससे मदद मिलती है, धन्यवाद। – inquisitive

4

मैं क्यों समझाऊंगा यह क्यों हो रहा है।

तारीख अलग है क्योंकि उनके फ़ील्ड अधिकतम से अधिक मूल्य अगले बड़े क्षेत्र में लुढ़क गए हैं।

मुझे यकीन है कि जिस क्रम में यह हल हो गई है नहीं हूँ, लेकिन यहाँ क्या सामान्य रूप में होता है:

को देखते हुए 2015-13-11 89:90:90

  1. साल के रूप में व्याख्या की है 2015, यह सही ढंग से सेट है। वर्तमान में 2015-01-01 00:00:00
  2. इस महीने को 13, 13/MONTHS_IN_A_YEAR = 1 के रूप में व्याख्या किया गया है, इसलिए एक वर्ष जोड़ा गया है और हमने महीने को 1 (13 महीने - 1 वर्ष) निर्धारित किया है। वर्तमान में 2016-01-01 00:00:00
  3. दिनांक 11 के रूप में व्याख्या किया गया है। यह सही ढंग से सेट है। वर्तमान में 2016-01-11 00:00:00
  4. घंटे का अर्थ 89, 89/HOURS_IN_A_DAY = 3 है, इसलिए 3 दिन जोड़े गए हैं और हमने घंटे को 17 (89 घंटे - 3 दिन) निर्धारित किया है। वर्तमान में 2016-01-14 17:00:00
  5. मिनट को 90, 90/MINUTES_IN_A_HOUR = 1 के रूप में व्याख्या किया गया है, इसलिए 1 घंटा जोड़ा गया है और हमने मिनटों को 30 (90 मिनट - 1 घंटा) सेट किया है। वर्तमान में 2016-01-14 18:30:00
  6. दूसरा 90, 90/SECONDS_IN_A_MINUTE = 1 के रूप में व्याख्या किया गया है, इसलिए 1 मिनट जोड़ा गया है और हम सेकंड को 30 (90 सेकंड - 1 मिनट) पर सेट करते हैं।

यह हमें 2016-01-14 18:31:30 के साथ छोड़ देता है।

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