添加90分钟NSDate

这个代码有什么问题?

NSDate *matchDateCD = [[object valueForKey:@"matchDate"] description]; // from coredata NSDate NSDate *add90Min = [matchDateCD dateByAddingTimeInterval:5400]; if ( matchDateCD >=[NSDate date] || add90Min <= matchDateCD ) { cell.imageView.image = [UIImage imageNamed: @"r.gif"];//Show image in the table } 

我需要在表中显示这个图像,如果比赛正在运行或90分钟

我不知道你调用的是什么object valueForKey: on是假设它返回一个NSDate对象,你额外的description调用将分配一个NSString (描述的返回值) matchDateCD 。 那不是你想要做的。

这就是你想要做的:

 NSDate *matchDateCD = [object valueForKey:@"matchDate"]; NSDate *add90Min = [matchDateCD dateByAddingTimeInterval:(90*60)]; // compiler will precompute this to be 5400, but indicating the breakdown is clearer if ( [matchDateCD earlierDate:[NSDate date]] != matchDateCD || [add90Min laterDate:matchDateCD] == add90Min ) { cell.imageView.image = [UIImage imageNamed: @"r.gif"];//Show image in the table } 

使用NSDate的dateByAddingTimeInterval方法添加秒数。

 NSDate* newDate = [oldDate dateByAddingTimeInterval:90]; 

然后您可以使用NSDateFormatter或NSDateComponents重新获取新的时间。

您还可以设置小时,年,月和秒等

  NSDateComponents *components= [[NSDateComponents alloc] init]; [components setMinute:30]; NSCalendar *calendar = [NSCalendar currentCalendar]; NSDate *myNewDate=[calendar dateByAddingComponents:components toDate:[NSDate date] options:0]; 

date是对象,因此比较指针并不好。 将它们转换为常见的时间间隔(浮点数):

 NSDate *now = [NSDate date]; NSDate *tenMinsLater = [now dateByAddingTimeInterval:600]; NSTimeInterval nowInterval = [now timeIntervalSinceReferenceDate]; NSTimeInterval *tenMinsLaterInterval = [tenMinsLater timeIntervalSinceReferenceDate]; if (nowInterval > tenMinsLaterInterval) NSLog(@"never get here"); 

或者,使用比较器:

 // also false under newtonian conditions if (now > [now laterDate:tenMinsLater]) NSLog(@"einstein was right!"); 

或使用earlierDate:或比较:

对于Swift 4

为Date添加90分钟使用addingTimeInterval(_ 🙂

 let now = Date() let minutes: Double = 90 let add90MinsDate = now.addingTimeInterval(minutes * 60) 

对于问题,下面的swift代码

 if let matchDateCD: Date = objest.value(forKey: "matchDate") as? Date { let add90Min = matchDateCD.addingTimeInterval(90 * 60) if matchDateCD >= Date() || add90Min > matchDateCD { cell.imageView.image = UIImage(named: "r.gif") } }