2011-01-07 20 views
13

मेरे पास दो टाइमस्टैम्प हैं जो दो अलग-अलग प्रारूपों में समय के समान तत्काल का वर्णन करते हैं।समय क्षेत्र के साथ जोडा के साथ पार्सिंग तिथि

2010-10-03 18:58:07 और 2010-10-03T16:58:07.000+02:00

मैं जोडा के साथ दो अलग-अलग दिनांक स्वरूपकों के साथ टाइमस्टैम्प को पार्स करता हूं। अंत में मैं दो डेटटाइम ऑब्जेक्ट्स रखना चाहता हूं जो समय के समान तत्काल होने के मामले में बराबर हैं।

डेटफॉर्मेटर समय क्षेत्र और लोकेशंस को नियंत्रित करने के लिए कई विधियों की पेशकश करता है लेकिन मैं इसे काम नहीं कर सका।

final String date1 = "2010-10-03 18:58:07"; // Europe/Berlin local time 
    final DateTimeFormatter formatter1 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); 
    final DateTime dateTime1 = formatter1.parseDateTime(date1); 

    final String date2 = "2010-10-03T16:58:07.000+02:00"; // Europe/Berlin local time with time zone 
    final DateTimeFormatter formatter2 = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
    final DateTime dateTime2 = formatter2.parseDateTime(date2); 

    Assert.assertTrue(dateTime1.isEqual(dateTime2)); 

अग्रिम धन्यवाद अगर किसी को मेरी मदद कर सकते हैं:

इस कोड है कि मैं काम करने के लिए चाहते हैं!

उत्तर

6

यदि आपका डिफ़ॉल्ट समय ज़ूम यूरोप/बर्लिन है, 2010-10-03 18:58:07 2010-10-03T16: 58: 07.000 + 00: 00 से मेल खाता है।

शायद आप स्ट्रिंग प्रस्तुति में समय क्षेत्र फ़ील्ड को गलत समझते हैं। आपका टाइम स्टैंप 2010-10-03T16: 58: 07.000 + 02: 00 का मतलब है कि "यह 16:58:07 एक समय क्षेत्र में जीएमटी से +2 घंटे ऑफसेट के साथ), या एक अन्य शब्द में" यह अब 16 है : 58: 07 बर्लिन में "। मुझे लगता है कि आप यह अनुमान लगाते हैं कि यह 16:58:07 GMT है?

+0

आपके पास "2010-10-03T16: 58: 07.000 + 02: 00 का एक प्रकार है जिसका मतलब है कि यह समय क्षेत्र में 16:58:07 नहीं है, जीएमटी से +2 घंटे ऑफसेट के साथ)"। इसे पढ़ना चाहिए: "2010-10-03T16: 58: 07.000 + 02: 00 का मतलब है कि यह समय क्षेत्र में 16:58:07 है जो यूटीसी से +2 घंटे ऑफसेट के साथ है)" – MicSim

+0

हां, मुझे उम्मीद है कि यह 16 हो : 58: 07 जीएमटी। फिर ऐसा लगता है कि टाइमस्टैम्प अभी टूटा हुआ है। ये विभिन्न सर्वरों की दो अलग-अलग लॉग फ़ाइलों से टाइमस्टैम्प हैं। और मुझे पूरा यकीन है कि वे एक ही घटना निर्दिष्ट करते हैं। तो यह मेरा भ्रम आया था। – wilfried

+0

@MacSim: निश्चित रूप से, मैंने वहां थोड़ा तेज़ लिखा था। – jarnbjo

4

आपके दो टाइमस्टैम्प समय में उसी तत्काल का प्रतिनिधित्व नहीं करते हैं (जैसा कि जंबो ने पहले से ही टिप्पणी की है)। Time zone as offsets from UTC देखें विकिपीडिया पर

यह भी देखें कि यह कैसे काम करता है parseDateTime दस्तावेज। यदि आप कोई समय क्षेत्र प्रदान नहीं करते हैं, तो डिफ़ॉल्ट समय क्षेत्र लागू किया जाएगा (यदि आप वहां हैं तो बर्लिन समय क्षेत्र यूटीसी + 2 है)। तो:

  • 2010-10-03 18:58:072010-10-03T18:58:07.000+02:00 (बर्लिन में यूटीसी के लिए 2 घंटे के ऑफसेट के साथ बर्लिन में, जिसका अर्थ है यूटीसी में 16:58) का मतलब है।
  • 2010-10-03T16:58:07.000+02:00 रहता है के रूप में यह, एक समय प्रदान की क्षेत्र है, क्योंकि (यानी बर्लिन में 16:58 यूटीसी, कि यूटीसी में 14:58 का मतलब करने के लिए 2 घंटे की भरपाई के साथ)

आशा है कि आप विचार आया । वांछित परिणाम प्राप्त करने के लिए आपको withZone विधि के साथ समय समायोजित करने की आवश्यकता होगी।

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