2013-09-22 6 views
5

नीचे एक ISO8601 दिनांक स्ट्रिंग का एक deserialization है जिसमें समय क्षेत्र जानकारी शामिल है। ध्यान दें कि समय क्षेत्र जानकारी खो दिया है:आईएसओ 8601 समय क्षेत्र जानकारी के साथ डेटटाइम

scala> val date1 = new DateTime().withZone(DateTimeZone.forID("Europe/Berlin")) 
date1: org.joda.time.DateTime = 2013-09-22T18:42:15.348+02:00 

scala> date1.getZone() 
res45: org.joda.time.DateTimeZone = Europe/Berlin 

scala> val date2 = new DateTime(date1.toString()) 
date2: org.joda.time.DateTime = 2013-09-22T19:42:15.348+03:00 

scala> date2.getZone() 
res46: org.joda.time.DateTimeZone = Europe/Vilnius 

scala> date1.getZone() == date2.getZone() 
res47: Boolean = false 

समय क्षेत्र जानकारी (यूटीसी ऑफसेट), धारावाहिक है +03:00 और +02:00 ISO8601 तार के अंत में के रूप में है, लेकिन यह अक्रमांकन के बाद खो दिया है। जैसा कि आप date2 डेटटाइम ऑब्जेक्ट देख सकते हैं, जिसे मुझे date1 की एक प्रति होने की उम्मीद है, +02:00 की बजाय सिस्टम का यूटीसी ऑफसेट है, जो date1 था।

यूटीसी ऑफ़सेट को संरक्षित करने के लिए मैं ISO8601 स्ट्रिंग को कैसे बेकार कर सकता हूं?

उत्तर

7

निर्माता आप उपयोग कर रहे, new DateTime(Object instant), (वास्तव में BaseDateTime के माध्यम से पारित) (आपके मामले में, एक String) नहीं पार्स, बजाय इसे धर्मान्तरित दिया वस्तु करता है।

लंबी कहानी संक्षेप में, यह का उपयोग करता है सामान्य समय क्षेत्र:

  1. निर्माता पारित कर दिया पैरामीटर एक Instant मानता है और अनुरोध करता है एक InstantConverterConverterManager
  2. से निर्माता कहता है कि StringConverter
  3. यही पद्धति पर getInstantMillis() वास्तव में एक मानक आईएसओ 8601 DateTimeFormatter का उपयोग करता है, हालांकि parseit calls parseMillis() के बजाय।
  4. parseMillis, जैसा कि आप javadocs से देख सकते हैं, डिफ़ॉल्ट समय क्षेत्र में एक तिथि लौटाता है। बजाय

उपयोग DateTime.parse:

DateTime date2 = DateTime.parse(date1.toString()); 
// 2013-09-22T19:21:48.461+02:00 
+0

शानदार! मुझे पहले से ही 'ISODateTimeFormat.dateTimeParser() का उपयोग करके एक रास्ता मिला था। ऑफसेटपार्स()। ParseDateTime (dateTimeString)', लेकिन यह आंखों पर बहुत अच्छा है। चीयर्स। –

+0

@DominykasMostauskis ग्रेट! मैंने कोड को पार्स करने में पिछले 20 मिनट बिताए और एक स्पष्टीकरण के साथ अपना जवाब अपडेट किया। यह जानना हमेशा अच्छा होता है * क्यों * यह उस तरह से काम करता है। उम्मीद है की यह मदद करेगा। अगर यह मदद करता है तो ऊपर उठने के लिए मत भूलना :) – Nicole

+0

+1, आपने निश्चित रूप से अर्जित किया है;) –

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