0

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

问题:如何仅找到日程表中下一个最接近的游戏(适用于 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 Clemson Football[24060:70b] 比赛日期为 (null ) 2013-11-11 16:10:05.987 克莱姆森足球[24060:70b] 比赛日期是 2013-09-19 04:00:00 +0000 2013-11-11 16:10:05.988 克莱姆森足球[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 克莱姆森足球[24060:70b] 比赛日期是 2013-11-02 04:00:00 +0000 2013-11-11 16:10:05.998 克莱姆森足球[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 克莱姆森足球[24060:70b] 比赛日期为 2013-11-23 05:00:00 +0000 2013-11-11 16:10:06.003 克莱姆森足球[24060:70b] 比赛日期是 2013-11-30 05:00:00 +0000 2013-11-11 16:10:06.005 克莱姆森足球[24060:70b] 比赛日期是 2013-12-07 05:00:00 +0000001 克莱姆森足球[24060:70b] 比赛日期是 2013-11-23 05:00:00 +0000 2013-11-11 16:10:06.003 克莱姆森足球[24060:70b] 比赛日期是 2013-11-30 05: 00:00 +0000 2013-11-11 16:10:06.005 克莱姆森足球[24060:70b] 比赛日期为 2013-12-07 05:00:00 +0000001 克莱姆森足球[24060:70b] 比赛日期是 2013-11-23 05:00:00 +0000 2013-11-11 16:10:06.003 克莱姆森足球[24060:70b] 比赛日期是 2013-11-30 05: 00:00 +0000 2013-11-11 16:10:06.005 克莱姆森足球[24060:70b] 比赛日期为 2013-12-07 05:00:00 +0000

提前感谢您提供的任何帮助。这看起来应该很简单,但相当令人沮丧。如果您需要更多信息,请告诉我。

4

2 回答 2

4

使用[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;
    }
}
于 2013-11-11T21:49:57.953 回答
0

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

   [[NSDate date] timeIntervalSinceDate:referenceDate];
于 2013-11-11T21:51:37.550 回答