2009-07-21 11 views
25

मैं एक तारीख से 4 घंटे घटाना चाहता हूं। मैंने एनएसडीएटी ऑब्जेक्ट में दिनांक स्ट्रिंग को निम्न कोड का उपयोग किया है:एनएसडीएटी से घंटों को कैसे घटाता है?

NSDateFormatter * dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"]; 
NSDate * mydate = [dateFormatter dateFromString:[dict objectForKey:@"published"]]; 

मैं आगे क्या करूं?

+4

(अब यह 6 साल है, और XCode के 4 प्रमुख संस्करणों बाद में ... और एनएसडीएटी की कार्यक्षमता अभी भी 200 9 में अनजान है !!) –

उत्तर

23

एनएससीएंडर मानव समय इकाइयों के आधार पर तिथियों को बदलने के लिए सामान्य एपीआई है। इसके लिए, आप नकारात्मक समय के साथ एनएससीएंडेंडर के -dateByAddingComponents:toDate:options: का उपयोग कर सकते हैं।

+0

यह एक बेहतर तरीका है - यह डीएसटी, लीप साल, सब कुछ से संबंधित है। – drewh

+0

एनएससीएंडरडर उपयोग करने के लिए एक अनुशंसित एपीआई नहीं है। http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSCalendarDate_Class/Reference/Reference.html – oberbaum

+10

@norskben: वह पृष्ठ NSCalendar ** दिनांक ** के लिए है। यही वह है जो इसका उपयोग नहीं करता है। यह विशेष रूप से उसी नोट में प्रतिस्थापन के रूप में एनएससीएंडर को अनुशंसा करता है। – Chuck

45
NSDate *newDate = [theDate dateByAddingTimeInterval:-3600*4]; 

Link to documentation


NSDate *newDate = [[[NSDate alloc] initWithTimeInterval:-3600*4 
               sinceDate:theDate]] autorelease]; 

Link to documentation

+0

पुराना सवाल मुझे पता है, लेकिन addTimeInterval अब बहिष्कृत लगता है, क्या इसके लिए कोई कारण है? –

+3

@DreamLane: क्योंकि इसने एपीआई के बाकी नामकरण सम्मेलन का उपयोग नहीं किया था। 'addTimeInterval:' सुझाव देता है कि 'एनएसडीएटी' उत्परिवर्तनीय है, जो यह नहीं है। –

+1

त्वरित प्रतिक्रिया के लिए धन्यवाद, अद्यतन विधि नाम के साथ अपने उत्तर को संपादित करने के लिए भी धन्यवाद! +1 –

1

अरे मरियम,
dateFromString समारोह NSDate, नहीं NSString देता है। आप बदलना चाहिए

NSDate * theDate = [dateFormatter dateFromString: datetemp];

उम्मीद है कि यह मदद करता है,
बेस्ट।
जी

6

iOS 8 के बाद से वहाँ है और अधिक सुविधाजनक dateByAddingUnit:

स्विफ्ट 2.x

//subtract 3 hours 
let calendar = NSCalendar.autoupdatingCurrentCalendar() 
newDate = calendar.dateByAddingUnit(.Hour, value: -3, toDate: originalDate, options: []) 
+1

टिप्पणी तथापि 3 घटाना कहते छलांग मूल्य यह बजाय होना चाहिए -3 – naz

+0

धन्यवाद, अद्यतन के रूप में इस्तेमाल किया गया था। –

4
//in Swift 3 
//subtract 3 hours 
let calendar = NSCalendar.autoupdatingCurrent 
newDate = calendar.date(byAdding:.hour, value: -3, to: originalDate) 
संबंधित मुद्दे