2010-05-12 21 views
7

मेरे पास एक जेएस तिथि है जिसे दोजो द्वारा आरएफसी 822 प्रारूप में परिवर्तित किया जा रहा है। फ़ंक्शन कॉल - dojo.date.toRfc3339 (जेएसडेट), निम्न दिनांक उत्पन्न करता है - 2007-02-26T20: 15: 00 + 02: 00।आरएफसी 822 जावा में टाइमज़ोन पार्सिंग

मेरे पास एक ऐसा एप्लिकेशन है जो ऊपर की तारीखों में पार्स करने के लिए जावा डेट SimpleDateFormat का उपयोग करता है। मुझे टाइमज़ोन के कारण इस दिनांक प्रारूप को पार्स करने में समस्याएं आ रही हैं। : mm: ':' चरित्र ssZ

इस समय क्षेत्र के लिए 'Z' के रूप में विफल रहता है एक उम्मीद नहीं है मैं

-mm-yyyy DD'T'hh उपयोग करने के लिए प्रयास किया है। क्या किसी को पता है कि मैं आरएफसी 822 दिनांक को ':' से संभालने के लिए एक पैटर्न कैसे निर्दिष्ट करूं?

संशोधन:

सही ढंग से व्याख्या मैं क्या करने की कोशिश कर रहा हूँ :) मैं तारीख RFC3339 में पैदा कर रहा है कहने के लिए चाहिए था और मैं RFC822 की जरूरत के लिए धन्यवाद। ऐसा लगता है कि मुझे जावास्क्रिप्ट को ओवरराइड करना होगा। मैं उम्मीद कर रहा था कि मुझे ऐसा करने की ज़रूरत नहीं है और किसी भी जावा कोड को संशोधित किए बिना डेट प्रारूप पैटर्न निर्दिष्ट कर सकता है क्योंकि डेट प्रारूप को किसी एप्लिकेशन के स्प्रिंग बीन में इंजेक्शन दिया जाता है।

बस पूर्णता के लिए, अनुक्रम में वर्णों को अनदेखा करने के लिए दिनांक स्वरूप अभिव्यक्ति में निर्दिष्ट करने का कोई तरीका है (स्ट्रिंग मैनिपुलेशन/प्रतिस्थापन के बिना)? इस मामले में मैं कह रहा हूं कि किसी भी ':' को अनदेखा करें या बस टाइमज़ोन को सभी को अनदेखा करें?

उत्तर

1

मैं टाइमज़ोन से ':' को पट्टी कर दूंगा और आपके ऊपर वाले प्रारूप का उपयोग करूंगा।

3

यह

SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-DD'T'hh:mm:ssZ"); 
format.parse("2007-02-26T20:15:00+02:00".replaceAll("([\\+\\-]\\d\\d):(\\d\\d)","$1$2")); 

काम करता है (ध्यान दें मैं 'Z' फॉर्मेट स्पेसिफायर के बाद प्रारूप से बाहर अंतिम पेट लेने गए हैं।)

2

RFC822 एक कॉलन समय में होने की अनुमति नहीं है तिथि का क्षेत्र हिस्सा। यह सिर्फ 4 अंकों की अपेक्षा करता है। उस डोजो विधि का नाम इंगित करता है कि यह आरएफसी 3339 का उपयोग कर रहा है। ऐसा लगता है कि व्यावहारिक रूप से ISO8601 के समान प्रारूप है। ऐसा ही होता है कि Joda Time में ISODateTimeFormat है जो ISO8601 संगत है यदि आप उस लाइब्रेरी का उपयोग करने में सक्षम हैं। विधि dateTimeNoMillis() दोजो प्रारूप के साथ एक मैच की तरह दिखता है। यह वास्तव में मानक जावा दिनांक और समय एपीआई से अच्छा है। अन्यथा अतिसंवेदनशील सुझाव जाने का रास्ता होगा।

Jamen के अद्यतन के जवाब में अपडेट किया गया

वहाँ डोजो एक प्रारूप है कि समय क्षेत्र शामिल नहीं है का उपयोग किया है के लिए एक रास्ता नहीं है? फिर आप मिलान करने के लिए जावा पक्ष पर प्रारूप समायोजित कर सकते हैं। मुझे डोजो के बारे में बहुत कुछ पता नहीं है और मैं इसे प्रदान करने वाले toRfc3339 फ़ंक्शन पर कोई दस्तावेज नहीं ढूंढ पाया है।

4
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class DateUtil { 

    public static Date ParseRFC3339DateFormat(String p_date) 
    { 
     try{ 
      SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
      String dts = p_date.replaceAll("([\\+\\-]\\d\\d):(\\d\\d)","$1$2"); 
      return formatter.parse(dts); 
     }catch (Exception e) { 
       return null; 
     } 
    } 
} 
1

dojo.date.toRfc3339 (jsDate) का उपयोग करने के बजाय आप एक कस्टम प्रारूप स्ट्रिंग के साथ अपना स्वयं का फ़ंक्शन बना सकते हैं।

कुछ की तरह कुछ कोलन को हटा देगा और आपके जावा प्रारूप द्वारा पार्सबल होना चाहिए।

function toRfc3339String(jsDate){ 
    return dojo.date.locale.format(jsDate,{selector: 'date', datePattern:'yyyy-MM-dd\'T\'hh:mm:ssZ'}); 
} 
0

आप इस सामान्य रूप से जावा 7. बिना मैं StackOverflow इस पर 2 सवाल पूछा है 2012 के भीतर ऐसा वहाँ एक समाधान है कि किसी भी तीसरे पक्ष के पुस्तकालयों की जरूरत नहीं है है कर सकते हैं,,।

बस मेरे latest question के विवरण में प्रस्तुत कार्यान्वयन की जांच करें, जो कि इस मुद्दे पर चर्चा करने वाले पहले व्यक्ति को भी इंगित करता है।

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