2012-04-01 14 views
5

मैंने जावा में String को util.Date में परिवर्तित करने के लिए एक सरल उपयोग विधि लिखा था। क्यों विधि पहले निवेश के लिए काम करता है क्या मैं यह पता लगाने में सक्षम नहीं हूँ दिया है, और दूसरे के लिए विफल रहता है, कि आदानों समान हैं:जावा में डेटा प्रारूप के साथ असंगत पारसे निष्पादन

कोड:

package util; 

import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class StringToDate { 

    public Date getDateFromString(String strDate, String dateFormat) { 

     DateFormat df = new SimpleDateFormat(dateFormat); 
     Date date = null; 

     try { 

      date = df.parse(strDate); 

     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 

     System.out.println(date); 

     return date; 
    } 

    public static void main(String[] args) { 

     StringToDate s2d = new StringToDate(); 

     s2d.getDateFromString("12-18-11, 10:36 AM","MM-dd-yy, hh:mm a"); 
     s2d.getDateFromString("02-04-12, 01:17 PM","MM-dd-yy, hh:mm a"); 
    } 
} 

आउटपुट:

Sun Dec 18 10:36:00 CET 2011 
null 
java.text.ParseException: Unparseable date: "02-04-12, 01:17 PM" 
    at java.text.DateFormat.parse(DateFormat.java:337) 
    at util.StringToDate.getDateFromString(StringToDate.java:17) 
    at util.StringToDate.main(StringToDate.java:33) 

तार्किक रूप से, उत्पादन पहले आउटपुट द्वारा Sat Feb 04 13:17:00 CET 2012 होना चाहिए था। ParseException क्यों फेंक दिया जा रहा है?

संपादित: निम्नांकित दो पंक्तियों को सही ढंग से काम:

s2d.getDateFromString("02-04-12", "MM-dd-yy"); 
s2d.getDateFromString("01:17 PM", "hh:mm a"); 

आउटपुट:

Sat Feb 04 00:00:00 CET 2012 
Thu Jan 01 13:17:00 CET 1970 

लेकिन अपवाद होता है जब मैं एक साथ दोनों की तारीख और समय पार्स करने के लिए प्रयास करें।

+0

मैं उलझन में हूं - यह मेरे लिए ठीक काम करता है। –

+0

मुझे भी - आप किस संस्कृति में हैं? एक छोटा लेकिन पूरा कार्यक्रम शामिल करने के लिए धन्यवाद, आपको दिमाग :) –

+0

@ जोनस्केट: मुझे "आप किस संस्कृति में हैं?" से मेरा मतलब क्या नहीं है, लेकिन तारीफ के लिए धन्यवाद! क्या कार्यक्रम आपके लिए ठीक काम करता है? मैं जेडीके 1.6 (1.6.0.11) का उपयोग कर रहा हूं। मैंने ग्रहण की कोशिश की, और उपर्युक्त [एसएससीसीई] (http://homepage1.nifty.com/algafield/sscce.html) चलाने के क्लासिक कमांड-प्रॉम्प्ट मार्ग भी। फिर भी, एक ही अपवाद; एक ही असंगतता। मदद! – SNag

उत्तर

7

क्या आपके पास कोई भी ब्रेकिंग स्पेस या कुछ अन्य यूनिकोड स्पेस कैरेक्टर है, कहीं आपकी तिथि स्ट्रिंग या प्रारूप मास्क में?

यदि मैं Unicode character 160 जैसे गैर-ब्रेकिंग स्पेस के साथ आपकी दिनांक स्ट्रिंग्स के दूसरे स्थान में से किसी एक स्थान को प्रतिस्थापित करता हूं तो मैं आपकी त्रुटि को पुन: उत्पन्न करने में सक्षम था।

+0

उत्कृष्ट पकड़ !! हाँ, वह था! अरे मेरा! उपरोक्त कार्यक्रम में दिनांक स्ट्रिंग वास्तव में बाहरी पाठ से कॉपी की गई थी जिसे मैं पार्स करने की कोशिश कर रहा था।ऐसी गैर-ब्रेकिंग रिक्त स्थान को कैसे खत्म कर सकते हैं, और उन्हें वास्तविक सफेद स्थान से बदल सकते हैं? – SNag

+1

+1 क्योंकि अब मैं अपने जीवन के साथ जा सकता हूं। मैं तब तक सो नहीं पाया जब तक मुझे पता नहीं चला कि वास्तव में क्या चल रहा था :) –

+0

जो मैंने खोजा था उसे मिला: 'cleanString = dirtyString.replace ("\ u00a0", "")' या 'cleanString = dirtyString .replace (" ", "") "पार्स-अपवाद-कारण **   ** को समाप्त करता है! :) – SNag

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