【发布时间】:2011-04-19 13:47:58
【问题描述】:
我正在处理我的 iPhone 开发中的日期。我需要将日期从当前日期增加 24 小时。
【问题讨论】:
-
24 小时还是一天?不想看到另一个闹钟一年两次在错误的时间叫醒我 ;-)
标签: ios objective-c cocoa-touch nsdate
我正在处理我的 iPhone 开发中的日期。我需要将日期从当前日期增加 24 小时。
【问题讨论】:
标签: ios objective-c cocoa-touch nsdate
您可以使用 dateByAddingTimeInterval
NSDate *currentDate = [NSDate date];
NSDate *datePlusOneDay = [currentDate dateByAddingTimeInterval:(60 * 60 * 24)]; //one day
【讨论】:
NSDate *datePlusOneDay吗?
简单:
NSDate *tomorrow = [[NSDate date] dateByAddingTimeInterval:86400];
【讨论】:
您可以添加一个 NSTimeInterval。由于这是以秒为单位的两倍,只需添加 24*60*60:
- (id)dateByAddingTimeInterval:(NSTimeInterval)seconds
【讨论】:
试试
NSDate *twentyFourHoursLater = [[NSDate alloc] initWithTimeIntervalSinceNow:60 * 60 * 24];
【讨论】:
在 NSUserdefaults 中保存下载日期,然后检查 24 小时是否已过? 如果不通知用户他/她将不得不等待。
【讨论】:
将上次下载日期保存在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 中。使用该方法的返回值来显示下载指示器或告诉用户他必须等待更多的警报。
【讨论】:
根据您真正想要实现的目标,仅将 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];
【讨论】: