如何从iOS上的Plist中的日期列表中找到今天的下一个最近的日期?

时间:2013-11-11 21:42:39

标签: ios date plist

情况:总之,我有一个足球赛程。我想使用一个自定义单元格,它只为日程表中的下一个游戏日期提供更多信息。

问题:我如何才能找到计划中的下一个最接近的游戏(适用于iOS)?

我已经观看了WWDC 2013视频“解决常见日期和时间问题”,但这主要适用于Mac。我在这里搜索了很多帖子,有些是关闭但不是我需要找到的只是我日程表中日期列表的下一个日期。从其他帖子我看到我可以比较两个具体日期,但这不是我想要做的。我想从日期列表中找到今天等于或等于今天的下一个最近日期。

这就是我现在所处的位置。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath     *)indexPath
{   
//Populate the table from the plist
NSDictionary *season = _schedContentArray[indexPath.section];
NSArray *schedule = season[@"Schedule"];  
NSDictionary *game = schedule[indexPath.row];

//find the closest game date after today's date ??
NSString *gameDateStr = game[@"GameDate"];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.calendar=calendar;
[dateFormatter setDateFormat:@"MM/dd/yy"];
NSDate *today = [NSDate date];
NSDate *gameDate = [dateFormatter dateFromString:gameDateStr];
//NSString *nextGame =
NSLog(@"game date is %@",gameDate);

NSLog返回游戏日期(开放日期除外): 2013-11-11 16:10:05.979 Clemson Football [24060:70b]比赛日期是2013-08-31 04:00:00 +0000 2013-11-11 16:10:05.982 Clemson Football [24060:70b]比赛日期是2013-09-07 04:00:00 +0000 2013-11-11 16:10:05.985克莱姆森足球[24060:70b]比赛日期是(null) 2013-11-11 16:10:05.987 Clemson Football [24060:70b]比赛日期是2013-09-19 04:00:00 +0000 2013-11-11 16:10:05.988 Clemson Football [24060:70b]比赛日期是2013-09-28 04:00:00 +0000 2013-11-11 16:10:05.990 Clemson Football [24060:70b]比赛日期是2013-10-05 04:00:00 +0000 2013-11-11 16:10:05.992 Clemson Football [24060:70b]比赛日期是2013-10-12 04:00:00 +0000 2013-11-11 16:10:05.993 Clemson Football [24060:70b]比赛日期是2013-10-19 04:00:00 +0000 2013-11-11 16:10:05.995 Clemson Football [24060:70b]比赛日期是2013-10-26 04:00:00 +0000 2013-11-11 16:10:05.996 Clemson Football [24060:70b]比赛日期是2013-11-02 04:00:00 +0000 2013-11-11 16:10:05.998 Clemson Football [24060:70b]比赛日期是2013-11-09 05:00:00 +0000 2013-11-11 16:10:06.000 Clemson Football [24060:70b]比赛日期是2013-11-14 05:00:00 +0000 2013-11-11 16:10:06.001 Clemson Football [24060:70b]比赛日期是2013-11-23 05:00:00 +0000 2013-11-11 16:10:06.003 Clemson Football [24060:70b]比赛日期是2013-11-30 05:00:00 +0000 2013-11-11 16:10:06.005 Clemson Football [24060:70b]比赛日期是2013-12-07 05:00:00 +0000

提前感谢您提供的任何帮助。这看起来应该很简单,但却相当令人沮丧。如果您需要其他信息,请与我们联系。

2 个答案:

答案 0 :(得分:3)

在列表中的日期使用[NSDate timeIntervalSinceNow],只需查找值最小的日期。

代码可能看起来像这样(未经过测试)。

NSArray *dates = ... // your list of dates
NSDate *closestDate = nil;
for(NSDate *date in dates) {
    if(([date timeIntervalSinceNow] < 0) {
         // the date is in the past
         continue;
    }
    if([date timeIntervalSinceNow] < [closestDate timeIntervalSinceNow] || !closestDate) {
        closestDate = date;
    }
}

答案 1 :(得分:0)

如果您有一个参考日期,并且您尝试从一个集合中获取今天最近的日期,则将日期转换为时间间隔并获得最低值。

   [[NSDate date] timeIntervalSinceDate:referenceDate];