2011-11-15 98 views
8

我需要用NSDate對象獲取昨天的日期。 有什麼想法?昨天用NSDate獲取objective-c

編輯:解決:

NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:-86400];

+0

可能重複:http://stackoverflow.com/questions/4052553/find-out-if-an-nsdate今天是 - 昨天 - 明天 – 0x8badf00d

+0

然後我會請你檢查我的答案。 – dasdom

回答

9
NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow: -(60.0f*60.0f*24.0f)]; 

編輯:這個解決方案是不正確的。請參閱Aadhiras回答正確的解決方案。

+1

'NSTimeInterval'是一個雙重的,所以你可以擺脫'f'。儘管編譯器對你來說很可能也是這樣做的。 – JustSid

+0

當我不需要精度時,我喜歡告訴編譯器浮點數是足夠的,因爲據我所知,iPhone處理器不能處理與浮點數一樣好的浮點數。 – dasdom

+1

取決於代,但編譯器很可能會解決已經固定的公式,即使它沒有三次乘法並不昂貴!有更好的地方做微型優化。 – JustSid

44

試試看看這個代碼。有了這樣一來,就可以得到未來幾天,接下來的幾個月,前幾天,前幾個月..

NSDate *now = [NSDate date]; 
int daysToAdd = -1; 

// set up date components 
NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease]; 
[components setDay:daysToAdd]; 

// create a calendar 
NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; 

NSDate *yesterday = [gregorian dateByAddingComponents:components toDate:now options:0]; 
NSLog(@"Yesterday: %@", yesterday); 
[gregorian release]; 
+6

+1這是一個更好的答案。如果今天或昨天是當地時間從夏令時變爲標準時間(或反之亦然)的那一天,則增加或減少86400秒可以給出錯誤答案,具體取決於您執行該操作的時間。 – progrmr