2012-04-23 8 views
10

अगर मैं कोशिश:क्यों स्ट्रिंग से एनएसडीएटी एक दिन कम है?

NSDateFormatter* formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyyMMdd"]; 

और

[formatter dateFromString:@"20120423"]; 

मेरा नया NSDate वस्तु हो जाएगा: 2012 04 । एक दिन कम क्यों?

धन्यवाद

+2

आपके सिम्युलेटर या डिवाइस में जोन सेट है। यह उस क्षेत्र में डिफ़ॉल्ट होगा। – rishi

+0

यह टाइमज़ोन के बारे में है ... अंतर केवल कुछ घंटों() या यहां तक ​​कि केवल एक ही हो सकता है, जैसे '2017-06-02 00:00:00 जीएमटी + 1' '2017-06-01 के बराबर है 23:00:00 GMT + 0' जो ऐसा लगता है वह एक दिन छोटा है, यदि आप वर्षों-महीनों के मूल्यों की परवाह करते हैं। – holex

उत्तर

19

आप समय क्षेत्र में समस्याएं आ रही है और यह कोड की इस पंक्ति जोड़कर हल किया जा सकता: जो तेज 3 संस्करण के लिए लग रहा है

formatter.timeZone = [NSTimeZone timeZoneWithName:@"GMT"]; 
+1

वास्तव में सहायक दोस्त !!! मैं पिछले एक दिन से समस्या हल कर रहा था और यह सरल लाइनर काम किया :) – Pushkraj

2

उन लोगों के लिए

let formatter  = DateFormatter() 
formatter.timezone = TimeZone(abbreviation: "GMT") 
formatter.dateFormat = "yyyyMMdd" 
formatter.date(from: "20120423") 
0

स्विफ्ट 3

का उपयोग कर एक लाइनर के लिए
Date.init(dateString: "2014-07-31", format: "yyyy-MM-dd", timeZone: TimeZone.init(abbreviation: "GMT")!) 
संबंधित मुद्दे