2013-04-10 7 views
5

क्या मुझे कुछ याद आ रहा है कि कैसे NSDate dateByAddingTimeInterval दिनों के साथ काम करता है? एक विशिष्ट तिथि (एआईडीएटी) से 33 दिनों के घटाने के लिए मेरा कोड यहां दिया गया है। एड्स के पास 00:00 पीएसटी का समय मूल्य है।NSDate dateByAddingTimeInterval घटाना दिन गलत तरीके से बदलता है

activityOne.ActivityDateTime = [AIDate dateByAddingTimeInterval:-33*24*60*60]; 

AIDate के बराबर होती है, तो 2013/04/09 00:00 पीएसटी, ऊपर कोड 33 दिन और 1 घंटे के जो 2013/03/06 23:00 पीएसटी बाहर काम करता है घटा देंगे।

+2

आपकी समस्या शायद डेलाइट सेविंग टाइम है। "1 दिन" व्यक्त करने के लिए कभी भी 24 * 60 * 60 का उपयोग न करें। –

+0

@MatthiasBauch हाँ इस आवश्यकता के लिए सही है NSDateComponents बेहतर है ... –

+0

@MatthiasBauch Ah - जो कुल समझ में आता है - पोस्ट करने के लिए धन्यवाद! – Aaron

उत्तर

11

24 * 60 * 60 24 घंटे, और नहीं 1 दिन का मतलब है। उन दोनों के बीच एक बड़ा अंतर है जब आपकी गणना परिवर्तन से या डेलाइट सेविंग टाइम में बदल जाती है।

संयोग से 33 दिन पहले आपके टाइमज़ोन में कोई डेलाइट सेविंग टाइम नहीं था।

ऐसा करने का सही तरीका NSDateComponents का उपयोग करना है। इस तरह:

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
NSDateComponents *offset = [[NSDateComponents alloc] init]; 
[offset setDay:-33]; 
NSDate *offsetedDate = [calendar dateByAddingComponents:offset toDate:[NSDate date] options:0]; 
6

आप bellow कोड के साथ यह कर सकते हैं ..

NSDateComponents *dc = [[NSCalendar currentCalendar] components:NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit|NSQuarterCalendarUnit fromDate:yourDate]; 
[dc setDay:dc.day - 33]; 
NSDate *noticeDate = [[NSCalendar currentCalendar] dateFromComponents:dc]; 

मैं आशा है कि यह आपके लिए उपयोगी है ...

+0

यह सही तरीके से काम करता है - इसे पोस्ट करने के लिए धन्यवाद। कोई विचार क्यों मेरा कोड गलत तरीके से घटाएगा? यदि संभव हो तो – Aaron

+0

@Aaron अपनी आवश्यकता के लिए, फिर NSDateComponents का उपयोग करें जो आपको सही आउटपुट देता है .. यह आपके लिए बेहतर है .. यहां आप इस प्रकार के प्रवाह का उपयोग भी कर सकते हैं NSDate * newDate1 = [अब addTimeInterval: 60 * 60 * 24 * daysToAdd] ; दिन जोड़ने के लिए लेकिन यह सही नहीं है ... –

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