2012-01-15 18 views
15

मुझे एनएसएसटींग ऑब्जेक्ट को एनएसएसटींग से उद्देश्य-सी में प्रारंभ करना होगा। मैं इसे इस तरह कार्य करें:मेरा समय क्षेत्र मेरे एनएसडीएट में क्यों नहीं बचाया जा रहा है?

NSString *dateString = [[webSentence child:@"DateTime"].text stringByReplacingOccurrencesOfString:@"T" withString:@" "]; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-mm-dd HH:mm:ss"]; 
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"Europe/Budapest"]]; 

NSDate *date = [[NSDate alloc] init]; 
date = [dateFormatter dateFromString:dateString]; 

उदाहरण के लिए: जब मैं स्ट्रिंग मान के साथ प्रयास करें @ "2011-01-02 17:49:54" मैं एक NSDate 2011-01-02 16:49:54 + 0000। जैसा कि आप देख सकते हैं कि दो मानों के बीच एक घंटे का अंतर है। एनएसडीएटी का गलत मूल्य है, यह वही होना चाहिए जो मैंने अपनी स्ट्रिंग में परिभाषित टाइमज़ोन में डेटफॉर्मर में सेट किया था। ऐसा लगता है कि यह मेरी तिथि का उपयोग यूटीसी के रूप में स्ट्रिंग को परिभाषित करता है, भले ही मैंने अपना टाइमज़ोन "यूरोप/बुडापेस्ट" पर सेट किया हो। मैं इस समस्या को कैसे ठीक करुं?

धन्यवाद!

उत्तर

14

दो बातें:

1) आप अपनी तिथि प्रारूप स्ट्रिंग में कोई त्रुटि है। आप महीने के लिए MM का उपयोग करना चाहिए, नहीं mm

2) (लोअरकेस मिमी मिनट के लिए है) आप आप NSDate वस्तु बनाने के बाद, आप NSDateFormatter विधि stringFromDate: उपयोग करने के लिए एक तारीख स्ट्रिंग एक विशेष समय क्षेत्र के स्थानीय जनरेट करना होगा। यदि आप एनएसडीएटी ऑब्जेक्ट पर सीधे सीधा एनएसएलओजी() करते हैं तो यह डिफ़ॉल्ट रूप से जीएमटी के रूप में तारीख दिखाएगा (जीएमटी बुडापेस्ट समय के पीछे एक घंटा है)

+0

बहुत बहुत धन्यवाद! – Tom

+0

तो इसका मतलब है कि यदि मेरे पास टाइमज़ोन है तो मैं उस टाइमज़ोन के साथ तारीख को NSDate ऑब्जेक्ट में संग्रहीत नहीं कर सकता? मुझे टाइमज़ोन को स्टोर करना होगा और इसे प्रदर्शित करते समय उपयोगकर्ता इसे कब रखना होगा? – Nil

27

एनएसडीएटी स्टोर मानक संदर्भ दिनांक के सापेक्ष तिथियां दिखाता है। कक्षा दस्तावेज़ों से:

"एनएसडीएटी का एकमात्र आदिम तरीका, समय इंटरवलसेंस रिफरेंसडेट, एनएसडीएटी इंटरफेस में अन्य सभी तरीकों के लिए आधार प्रदान करता है। यह विधि एक पूर्ण संदर्भ दिनांक के सापेक्ष एक समय मूल्य देता है-1 का पहला तत्काल जनवरी 2001, जीएमटी। "

एनएसडीएटी के पास समय क्षेत्र की कोई अवधारणा नहीं है। तो एनएसडीएटीफॉर्मेटर ने सही काम किया: इसने एक तारीख को बदल दिया जिसे आपने बताया था कि इसमें जीएमटी ऑफ़सेट था (समय क्षेत्र निर्दिष्ट करके), और आपको उस तारीख के लिए "सामान्यीकृत" एनएसडीएट दिया।

यदि आप यूरोप/बुडापेस्ट समय क्षेत्र में प्रतिनिधित्व की तारीख को देखना चाहते हैं, तो या तो अपने मौजूदा डेट फॉर्मेटर (-स्ट्रिंगफ्रॉमडेट :) या उपयुक्त एनएसडीएट विवरण विधि (उदा। -डिस्क्रिप्शन विथ कैलेंडरफॉर्मैट: टाइमज़ोन: लोकेल :) का उपयोग करें।

पीएस- आपको लिखित रूप में आपके कोड में एक आवंटन/init की आवश्यकता नहीं है। गैर-एआरसी में जो रिसाव होगी।

पीपीएस- आपका दिनांक प्रारूप गलत है और गैरकानूनी परिणाम दे रहा है। मैं आगे बढ़ गया हूं और एआरसी के तहत परीक्षण किया गया है:

NSString *dateString = @"2011-09-02 17:49:54"; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
NSTimeZone *tz = [NSTimeZone timeZoneWithName:@"Europe/Budapest"]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
[dateFormatter setTimeZone:tz]; 

NSDate *date = [dateFormatter dateFromString:dateString]; 
NSLog(@"%@", [dateFormatter stringFromDate:date]); 
NSLog(@"%@", [date descriptionWithCalendarFormat:nil timeZone:tz locale:nil]); 
+0

तो एनएसडीएटी में टाइमज़ोन की कोई अवधारणा नहीं है। लेकिन इसमें जीएमटी अवधारणा है? क्या मैं टाइमज़ोन को जीएमटी घंटों में परिवर्तित नहीं कर सकता और इसे एनएसडीएट ऑब्जेक्ट में जोड़ सकता हूं? – Nil

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

  • कोई संबंधित समस्या नहीं^_^