2011-04-19 73 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];