2011-04-05 13 views
16

मेरे पास एक एएसपी.नेट एमवीसी 3 वेबसाइट है जो JSON के माध्यम से मेरे आईओएस ऐप के साथ संचार करती है। जेएसओएन प्रतिक्रिया में भेजे गए ऑब्जेक्ट्स के हिस्से के रूप में, मेरे पास yyyy-MM-dd HH:mm:ss ZZZ के प्रारूप में तिथियां हैं जो 2011-04-05 16:28:22 -07:00 आउटपुट करती हैं। मैं आईओएस में इसका विश्लेषण कैसे करूं?आईओएस में दिनांक/समय पार्सिंग: टाइमज़ोन के साथ सौदा कैसे करें (या सौदा नहीं)?

इस कोड को मैं चारों ओर के साथ खिलवाड़ कर रहा हूँ अभी है:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"]; 
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]]; 
NSDate *date = [dateFormatter dateFromString:@"2011-04-05T16:28:22-0700"]; 

NSLog(@"%@; %@; %@", dateFormatter, date, [NSTimeZone localTimeZone]); 
नोट करने के लिए

पहली बात 2011-04-05 16:28:22 -07:002011-04-05T16:28:22-0700, जहां एक T (बदल देता पहला अंतरिक्ष यह सोचते हैं कि समय के लिए खड़ा है की तरह लग रहे करने के लिए किया है , या जहां स्ट्रिंग का समय भाग से शुरू होता है?), दूसरी जगह हटा दी जाती है और समय क्षेत्र में कोलन हटा दिया जाता है। मुझे लगता है कि मुझे उस स्ट्रिंग को प्रारूपित करने का एक तरीका मिलेगा जो .NET स्ट्रिंग आईओएस के अनुरूप होने के लिए वापस भेज रहा है।

असली मुद्दा यह है कि जेएसओएन प्रतिक्रिया में जो मैंने भेजा है उससे 7 घंटे पहले आउटपुट की गई तारीख है। इसलिए, आईओएस 2011-04-05 16:28:22 -07:002011-04-05 23:28:22 +0000 के रूप में आउटपुट करता है, और यह गलत है जहां तक ​​मेरा ऐप चिंतित है।

एकमात्र समाधान जो मैंने पाया है वह JSON में दिनांक 2011-04-05 16:28:22 +00:00 के रूप में भेजना है, लेकिन यह फिर से गलत है क्योंकि मैं वास्तविक तिथि को बदल रहा हूं।

वैसे भी, मैं किसी को एक बार देख लेने और देने के लिए मुझे पता है कि मैं कैसे पार्स कर सकते हैं दिनांक स्ट्रिंग नेट एक NSDate वस्तु मैं करने के लिए प्रारूप yyyy-MM-dd HH:mm:ss ZZZ (जो मैं yyyy-MM-ddTHH:mm:ssZZZ को फिर से लिखा जा सकता है लगता है) के माध्यम से outputting है कि सराहना करेंगे आईओएस में उपयोग कर सकते हैं।

+0

जब आप आईओएस आउटपुट के बारे में बात करते हैं, तो क्या आपका मतलब एनएसएलओजी है? यदि ऐसा है, तो एनएसएलओजी हमेशा जीएमटी आउटपुट को डिफ़ॉल्ट करता है। तो, आपके कोड में कुछ भी गलत नहीं है। –

+0

हां, यही वह है जिसका मैं जिक्र कर रहा था। लेकिन अगर जीएमटी में 'एनएसएलओजी' आउटपुट 'यूलाबेल' आउटपुट कहता है तो क्या? – Gup3rSuR4c

+0

एनएसडीएटी समय जीएमटी के रूप में स्टोर करता है। आपको किसी भी तारीख को प्रदर्शित करते समय [NSDateFormatter] (http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html) -stringFromDate विधि का उपयोग करना होगा स्ट्रिंग। NSDateFormatter वर्तमान समय क्षेत्र में भी डिफ़ॉल्ट है। –

उत्तर

14

मैं यह कैसे सही है पता नहीं है, लेकिन मैं अंत में पाया .NET में मैं DateTime.ToUniversalTime().ToString("yyyy-MM-ddHH:mm:ss") क्या करना है और iOS पक्ष पर मैं यह करने के लिए है कि: उसके बाद ही

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]]; 
[dateFormatter setDateFormat:@"yyyy-MM-ddHH:mm:ss"]; 
NSDate *date = [dateFormatter dateFromString:@"2011-04-0600:28:27"]; 

तारीख है NSLog आउटपुट के समय सही है, इसलिए मुझे लगता है कि मुझे अंततः उचित तिथि/समय मिल गया है।

2

आप इंटरचेंज के लिए हर जगह यूटीसी समय का उपयोग करके और समय क्षेत्र के साथ परेशान नहीं होने के लगभग निश्चित रूप से बेहतर हैं। मुझे यकीन है कि आप ऐसा करने के लिए अपना एएसपी.नेट कोड प्राप्त कर सकते हैं, और प्राप्त करने वाले अंत में भी पार्स करना आसान है। NSDateFormatter मानक यूनिकोड दिनांक स्वरूपण वाक्यविन्यास का उपयोग करता है, जिसे आप here के बारे में पढ़ सकते हैं।

+0

मैं देखता हूं, मैंने सार्वभौमिक समय में .NET पक्ष को आउटपुट में बदल दिया है, लेकिन मुझे यकीन नहीं है कि आईओएस पक्ष पर स्ट्रिंग को कैसे पार्स किया जाए। यहां JSON प्रतिक्रिया है: '{" प्रारंभ करें ":" \/दिनांक (1302048496487) \/"," अंत ":" \/दिनांक (1302055696487) \/"}'। उस पर पार्स करने के लिए उचित कोड क्या होगा? – Gup3rSuR4c

+0

उपरोक्त टिप्पणी को स्क्रैच करें, मैं आगे यूटीसी समय प्रारूपित कर सकता हूं ... – Gup3rSuR4c

+0

दुर्भाग्यवश, कंप्यूटर के लिए अच्छा होने पर टाइमज़ोन को अनदेखा करना, मानव के लिए "पूरी तरह से सही" नहीं है। डेलाइट सेविंग इत्यादि, इसे और भी अधिक बनाते हैं :( –

6

आपकी आईओएस तिथि पार्सिंग कोड सही है: 2011-04-05 16:28:22 -07:00 और 2011-04-05 23:28:22 +0000 एक ही समय में अलग-अलग समय क्षेत्रों में प्रतिनिधित्व करते हैं। आपकी एकमात्र समस्या यह है कि एनएसडीएटी वास्तव में समय क्षेत्र को संग्रहीत नहीं करता है, और इसलिए [date description] आउटपुट यूटीसी का उपयोग कर आउटपुट करता है।

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