2012-03-22 3 views
10

का उपयोग करते समय गलत डेटा प्राप्त करना कैलेंडर के रूप में स्ट्रिंग को पार्स करने का प्रयास करते समय मुझे अजीब त्रुटि मिल रही है। ऐसा लगता है कि यह दिनांक वस्तु को गड़बड़ कर देता है जिसे मैं परिणाम कैलेंडर के समय को सेट करने के लिए उपयोग करता हूं। त्रुटि बहुत असंगत है (या मुझे इसमें कोई तर्क नहीं दिख रहा है)। क्या कोई यह बता सकता है कि मैं क्या गलत कर रहा हूं?SimpleDateFormat.parse()

public class caltest{ 
public static final SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss.SSS"); 

public static void main(String[] args) { 
    String date1 = "1992-03-11 12:00:12.123"; 
    String date2 = "1993-03-11 12:00:12.123"; 
    String date3 = "1994-03-11 12:00:12.123"; 
    String date4 = "1995-03-11 12:00:12.123"; 
    parseStringAsCalendar(date1); 
    parseStringAsCalendar(date2); 
    parseStringAsCalendar(date3); 
    parseStringAsCalendar(date4); 
} 
public static String calendarToString(Calendar cal) { 
    return sdf.format(cal.getTime()); 
} 

public static Calendar parseStringAsCalendar(String s) { 
    Date time = null; 
    try { 
     time = sdf.parse(s); 
    } catch (ParseException e) { 
     System.out.println("Exception"); 
     e.printStackTrace(); 
    } 
    System.out.println(time.toString()); 
    GregorianCalendar ret = new GregorianCalendar(); 
    ret.setTime(time); 

    return ret; 
} 

}

उत्पादन होता है:

Sun Dec 29 12:00:12 CET 1991 
Sun Dec 27 12:00:12 CET 1992 
Sun Dec 26 12:00:12 CET 1993 
Sun Jan 01 12:00:12 CET 1995 

उत्तर

18

आप अपने फॉर्मेट स्पेसिफायर, जो सप्ताह साल (जावा 7 के रूप में, मेरा मानना ​​है) है में YYYY उपयोग कर रहे हैं। आप yyyy चाहते हैं, जो सिर्फ "वर्ष" है। (SimpleDateFormat documentation देखें।)

मुझे संदेह है कि बाकी की तारीख समाप्त हो गई थी क्योंकि आपने महीने और दिन निर्दिष्ट करने का प्रयास किया था, जो सप्ताह के वर्ष में वास्तव में "विशेषताएं" नहीं हैं ... यदि आप निर्दिष्ट करेंगे और सप्ताह के दिन "सप्ताह वर्ष के सप्ताह", यह कुछ और समझदार परिणाम दे दिया है सकते हैं, लेकिन केवल तभी जब आप वास्तव में मतलब सप्ताह वर्ष, मैं :) शक जो

+0

दोनों जवाब बहुत उपयोगी थे, यह एक मूल समस्या पर एक प्रकाश की अधिक चमकता है। मैं गलत दस्तावेज की जांच कर रहा था। – Tegi

+3

आपने मुझे इंटरनेट पर कई घंटे के निष्पक्ष खोज से बचाया है! धन्यवाद – KoW

+0

* वर्ष * और * सप्ताह वर्ष * के बीच क्या अंतर है? दस्तावेज इस भेद पर थोड़ा सा स्पैस है (जैसा कैलेंडर के लिए प्रलेखन है)। – tytk

3

इस का प्रयोग करें उपयोग करने के लिए:

public static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 

यह साल के लिए y कम मामला है, ऊपरी मामले Y नहीं है। इसी के साथ, परिणाम है:

Wed Mar 11 12:00:12 EST 1992 
Thu Mar 11 12:00:12 EST 1993 
Fri Mar 11 12:00:12 EST 1994 
Sat Mar 11 12:00:12 EST 1995 

यहाँ देखें: