2011-04-19 108 views
0

我正在使用我的iPhone開發中的日期。我需要從當前日期起24小時增加日期。更改當前日期

+0

24小時還是一天?不希望看到另一個鬧鐘在一年兩次的錯誤時間喚醒我;-) – 2011-04-19 14:19:55

回答

1

您可以使用dateByAddingTimeInterval

NSDate *currentDate = [NSDate date]; 
NSDate *datePlusOneDay = [currentDate dateByAddingTimeInterval:(60 * 60 * 24)]; //one day 
+0

不應該說'NSDate * datePlusOneDay'嗎? – 2011-04-19 14:06:07

+1

@NickWeaver你是對的..但它已經由Matthias編輯..謝謝 – Krishnabhadra 2012-05-29 11:18:24

1

簡單:

NSDate *tomorrow = [[NSDate date] dateByAddingTimeInterval:86400]; 
+0

addTimeInterval是iOS4中的棄用方法 – 2011-04-19 13:53:45

+0

感謝您指出。我繼續編輯我的答案。 – 2011-04-19 14:04:14

0

你可以添加一個NSTimeInterval。由於這是在幾秒鐘內雙只需加24 * 60 * 60:

- (id)dateByAddingTimeInterval:(NSTimeInterval)seconds 
0

嘗試

NSDate *twentyFourHoursLater = [[NSDate alloc] initWithTimeIntervalSinceNow:60 * 60 * 24]; 
0

保存在NSUserDefaults的下載日期再檢查如果24小時過去了? 如果不通知用戶他/她將不得不等待。

+0

NSUserdefaults不是關鍵字,我沒有讓你 – sujay 2011-04-19 14:37:44

0

將上次下載日期保存在NSUserDefaults。而當你嘗試下載只是檢查該日期。

是這樣的:

- (BOOL)downloadDataForecedUpdate:(BOOL)forced { 
    NSDate *lastDownloadDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"lastDownloadDate"]; 
    if (forced || !lastDownloadDate || [[NSDate date] timeIntervalSinceDate:lastDownloadDate] > 24 * 60 * 60) { 
     // start download 
     [NSURLConnection connectionWithRequest:myDownloadRequest delegate:self]; 
     return YES; 
    } 
    return NO; 
} 


- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
    // process data 

    [[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:@"lastDownloadDate"]; 
} 

你可以叫[self downloadDataForecedUpdate:NO]徘徊無論它是適當的。在應用程序啓動或IBAction中。使用方法的返回值來顯示下載指示符或告訴用戶他必須等待更多的警報。

0

根據您真正想要達到的效果,僅在您的時間間隔內添加86,400(或60 * 60 * 24)可能不是您想要的。例如,如果用戶體驗夏令時調整,那麼如果發生在午夜附近,您將會關閉一小時,甚至一天。更好的方法是向NSCalendar詢問結果,該結果考慮了用戶本地時區。

NSDate *start = yourDate; 
NSDateComponents *oneDay = [NSDateComponents new]; 
[oneDay setDay:1]; 

NSCalendar *cal = [NSCalendar currentCalendar]; 
NSDate *end = [cal dateByAddingComponents:oneDay toDate:start options:0];