2014-09-19 7 views
5

के साथ आज तक पार्स ISO8601 दिनांक स्ट्रिंग दिनांक मैं जावास्क्रिप्ट एप्लिकेशन से/दिनांक को क्रमबद्ध/deserialize करने की कोशिश कर रहा हूं।यूटीसी टाइमज़ोन

सर्वर पक्ष, मैं जावा का उपयोग करता हूं, जोडाटाइम उस पर स्थापित है। मुझे पता चला कि यूटीसी समय क्षेत्र के साथ आईएसओ को क्रमबद्ध कैसे करें, लेकिन यह पता नहीं लगा सकता कि रिवर्स ऑपरेशन कैसे करें।

यहाँ मेरी कोड

public static String getIsoDate(Date date) 
{ 
    SimpleDateFormat dateToIsoDateString = new SimpleDateFormat(ISO_8601_DATE_FORMAT); 
    TimeZone tz = TimeZone.getTimeZone("UTC"); 
    dateToIsoDateString.setTimeZone(tz); 
    return dateToIsoDateString.format(date); 
} 

// this will return a date with GMT timezone 
public static Date getDateFromIsoDateString(String iso8601date) 
{ 
    DateTimeFormatter jodaParser = ISODateTimeFormat.dateTimeNoMillis(); 
    return jodaParser.parseDateTime(iso8601date).toDate(); 
} 

मैं का उपयोग कर या नहीं Joda कोई आपत्ति नहीं है बस एक त्वरित और काम समाधान,

धन्यवाद

+0

[परिवर्तित आईएसओ java.util.Date के लिए 8601-संगत स्ट्रिंग] (के संभावित डुप्लिकेट http://stackoverflow.com/questions/2201925/ कनवर्टिंग-आईएसओ -8601-compliant-string-to-Java-util-date) –

+0

आपका प्रश्न स्पष्ट नहीं है। आपको इनपुट और वांछित आउटपुट के नमूने प्रदान करना चाहिए। –

उत्तर

14

यदि आप जावा 7 या इससे पहले का उपयोग कर रहे हैं तो आप इस post का उल्लेख कर सकते हैं।

क्या आप जावा 8 का उपयोग कर रहे हैं, तो कर सकता है:

DateTimeFormatter timeFormatter = DateTimeFormatter.ISO_DATE_TIME; 
    TemporalAccessor accessor = timeFormatter.parse("2015-10-27T16:22:27.605-07:00"); 

    Date date = Date.from(Instant.from(accessor)); 
    System.out.println(date); 
+0

धन्यवाद! जावा 8 समाधान हमेशा पसंद किया जाता है। – anon58192932

3

आपका प्रश्न स्पष्ट और विशिष्ट नहीं है की जरूरत है। शायद इन छोटे उदाहरणों में मदद मिलेगी। पुराने java.util.Date को मिलाकर और जोडा-टाइम के साथ कैलेंडर कक्षाएं आपको भ्रमित कर सकती हैं। जोडा-टाइम पूरी तरह से को कक्षाओं के बजाय उन कक्षाओं को प्रतिस्थापित करता है।

जोडा-टाइम ISO 8601 पर स्ट्रिंग्स के लिए डिफ़ॉल्ट, दोनों पार्सिंग और जनरेटिंग के लिए डिफ़ॉल्ट है। Joda-Time में आईएसओ 8601 के लिए डिफॉल्ट पार्सर्स अंतर्निहित हैं, इसलिए बस अपनी अनुपालन स्ट्रिंग को कन्स्ट्रक्टर या स्थिर parse विधि पर पास करें।

java.util.Date date = new DateTime("2010-01-01T12:00:00+01:00Z").toDate(); 

जब संभव हो, Joda समय साथ java.util.Date और .Calendar, और छड़ी से बचने और यह DateTime के रूप में इस तरह के वर्गों है। केवल उन हिस्सों का उपयोग करें जहां अन्य वर्गों द्वारा आवश्यक है।

DateTime dateTimeUtc = new DateTime(someJavaDotUtilDotDate, DateTimeZone.UTC); // Joda-Time can convert from java.util.Date type which has no time zone. 
String output = dateTime.toString(); // Defaults to ISO 8601 format. 
DateTime dateTimeUtc2 = new DateTime(output, DateTimeZone.UTC); // Joda-Time can parse ISO 8601 strings. 

प्रस्तुति के लिए, उपयोगकर्ता द्वारा अपेक्षित समय क्षेत्र में समायोजित करें।

DateTime dateTimeMontréal = dateTimeUtc.withZone(DateTimeZone.forID("America/Montreal")); 
संबंधित मुद्दे