2015-08-22 8 views
5

क्या कोई मुझे बता सकता है कि दिखाए गए इनपुट के लिए false का मान वापस करने के लिए निम्न विधि कैसे प्राप्त करें? यह true लौटा रहा है, जो कुछ मुझे उम्मीद नहीं है।एक अमान्य तिथि वास्तविक तिथि के रूप में सफलतापूर्वक पार क्यों करती है?

isDateValid("19/06/2012 5:00, 21:00","dd/MM/yyyy HH:mm") 

मुझे लगता है कि इस false लौट जाना चाहिए, लेकिन जाहिरा तौर पर जावा ऐसा लगता नहीं है। प्रदान की गई वास्तविक तिथि स्ट्रिंग में अंत में इन अतिरिक्त वर्ण शामिल हैं: ", 21:00"

public static boolean isDateValid(String date, String dateFormat) 
{ 
     try { 
      DateFormat df = new SimpleDateFormat(dateFormat); 
      df.setLenient(false); 
      Date newDate = df.parse(date); 
      System.out.println("Date value after checking for validity: " + newDate); 
      return true; 
     } catch (ParseException e) { 
      return false; 
     } 
} 

उत्तर

7

parse जरूरी पूरे String उपयोग नहीं करता। यह the Javadoc में बहुत स्पष्ट है, जोर मेरा: दिए गए स्ट्रिंग एक तिथि का उत्पादन करने की शुरुआत से

parse

public Date parse(String source) throws ParseException

पार्स पाठ। विधि दिए गए स्ट्रिंग के पूरे पाठ का उपयोग नहीं कर सकती है। दिनांक पार्सिंग पर अधिक जानकारी के लिए parse(String, ParsePosition) विधि देखें।


आप अगर वहाँ parse(String text, ParsePosition pos) का उपयोग करके स्ट्रिंग के अंत में अतिरिक्त वर्ण हैं पता लगा सकते हैं। यदि pos स्ट्रिंग के अंत के बराबर नहीं है, तो अंत में अतिरिक्त वर्ण शेष थे।

यहां एक परीक्षण कार्यक्रम है जिसमें टेस्ट रिग शामिल है जो आपके इच्छित तरीके से ठीक से जांच करेगा। इस कार्यक्रम में, pos.getIndex()0 अगर यह सब पर एक नंबर है कि बहुत छोटा है, अगर वहाँ अंत में अतिरिक्त वर्ण हैं पार्स नहीं कर सकता, हो जाएगा, और बराबर अगर यह काम करता है जिस तरह से आप चाहते हैं

public class DateFormatTest { 
    public static void main(String[] args) { 
    // should be false 
    System.out.println(isDateValid("19/06/2012 5:00, 21:00", "dd/MM/yyyy HH:mm")); 
    System.out.println(isDateValid("19/06/201", "dd/MM/yyyy HH:mm")); 

    System.out.println(); 

    // should be true 
    System.out.println(isDateValid("19/06/2012 5:00", "dd/MM/yyyy HH:mm")); 
    } 

    public static boolean isDateValid(String date, String dateFormat) { 
    ParsePosition pos = new ParsePosition(0); 
    DateFormat df = new SimpleDateFormat(dateFormat); 
    df.setLenient(false); 
    df.parse(date, pos); 

    return pos.getIndex() == date.length(); 
    } 
} 
संबंधित मुद्दे