2015-05-18 11 views
6

से जब मैं नीचे की तरह करते हैं,निकाला जा रहा है "Z" भाग XMLGregorianCalender

GregorianCalendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC")); 
calendar.setTime(startTime); // startTime Date 
DatatypeFactory.newInstance().newXMLGregorianCalendar(calendar); 

मैं 2015-04-15T11:04:30.000Z तरह आउटपुट मिलता है।

मैं इसे 2015-04-15T11:04:30.000 जैसा होना चाहता हूं।

क्या यह हासिल करने का कोई तरीका है?

उत्तर

1

कर

DatatypeFactory df; 
try { 
    df = DatatypeFactory.newInstance(); 
    return df.newXMLGregorianCalendar(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss")); 
} catch (DatatypeConfigurationException e) { 
    // throw new SomeRuntimeException(e); 
} 

का पालन के रूप में या XMLGregorianCalendar से नए वर्ग का विस्तार, toXMLFormat ओवरराइड और फिर निहित उदाहरण के लिए सभी अन्य तरीकों प्रतिनिधि।

class CustomXMLGregorianCalendar extends XMLGregorianCalendar 
{ 
    XMLGregorianCalendar calendar; 

    CustomXMLGregorianCalendar(XMLGregorianCalendar calendar){ 
     this.calendar = calendar; 
    } 

    public String toXMLFormat() { 
     String text = calendar.toXMLFormat(); 
     int pos = text.indexOf('Z'); 

     return pos < 0 ? text : text.substring(0,pos); 
    } 

    public void setTimezone(int offset){ calendar.setTimezone(offset); } 
    // ... 
} 
2

इसका कारण यह है अपने स्थानीय समय क्षेत्र, प्राप्त करने के लिए क्या आप SimpleDateFormat का उपयोग कर की तारीख बदलने की जरूरत है:

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

अद्यतन आप जब टिप्पणी:

I tried formatting it to a String then again parsing it to a Date. Then setting time in Calender object. Does not work. Still i get output as "2015-04-15T11:04:30.000Z"

आप समझना चाहिए कि Calendar या Date वस्तुओं को अपने प्रारूप में संग्रहीत किया जाता है, दूसरी बात यह है कि आप उन्हें कैसे प्रिंट करते हैं, इसलिए इस मामले में, 2015-04-15T11:04:30.000Zमें देखेंप्रतिनिधित्व महत्वपूर्ण नहीं है, आपको 2015-04-15 पर सही दिनांक 11:04:30 पर वांछित प्रारूप में दिखाने के लिए यह आवश्यक है कि यह उपयोगकर्ता के अनुकूल आपके आउटपुट को बनाने के लिए है।

उत्पादन आपको मिल Calendar.toString() से है और विधि दस्तावेज़ का कहना है:

Return a string representation of this calendar. This method is intended to be used only for debugging purposes, and the format of the returned string may vary between implementations. The returned string may be empty but may not be null.

तो आदेश की तारीख और समय स्टोर करने के लिए में, अपने Calendar वस्तु सही है। इसे प्रिंट करने के लिए, आपको इसे String में बदलना होगा।

+0

मैं फिर से फिर एक स्ट्रिंग के लिए प्रारूपित एक तिथि के लिए यह पार्स करने की कोशिश की। फिर कैलेंडर ऑब्जेक्ट में समय निर्धारित करें। काम नहीं करता। फिर भी मुझे "2015-04-15T11: 04: 30.000Z" के रूप में आउटपुट मिलता है। – Raj

+0

कैलेंडर की'toString() 'विधि का अपना कार्यान्वयन है !!! यदि आप इसे आउटपुट बदलना चाहते हैं, या बस एक स्ट्रिंग स्वरूपित मुद्रित करना चाहते हैं, तो आपको इसे ओवरराइड करने की आवश्यकता है, आपको इसकी देखभाल करने की आवश्यकता नहीं है कि यह कैसे संग्रहीत किया जाता है .... –

+1

धन्यवाद।मैंने उस स्पष्टीकरण से बहुत कुछ सीखा। – Raj

8

स्वीकृत जवाब या मेरे जावा क्योंकि मैं इस त्रुटि प्राप्त पुराना हो रहा है: The method newXMLGregorianCalendar(String) in the type DatatypeFactory is not applicable for the arguments (SimpleDateFormat)

और मैं विस्तार करने के लिए नहीं करना चाहता था, तो मैं समय-क्षेत्र को हटाने के द्वारा इसे हल:

xmlCalendar.setTimezone(DatatypeConstants.FIELD_UNDEFINED); 
2

यदि आप XMLGregorianCalendar ऑब्जेक्ट से केवल "Z" को हटाना चाहते हैं तो बस इस विधि को कॉल करें।

xmlDate.setTimezone (DatatypeConstants.FIELD_UNDEFINED)

0

मुझे लगता है कि स्थिति था और यह हल किया गया था, इस लाइन का उपयोग:

XMLGregorianCalendar dateNew = DatatypeFactory.newInstance().newXMLGregorianCalendar("2017-09-06T21:08:14"); 
संबंधित मुद्दे