2012-06-13 121 views
16

此代码有什么问题?将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分钟

+0

SWIFT代码是什么'newDate'? –

回答

37

我不知道什么是object如果您打电话valueForKey:只是假设它返回一个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 
} 
6

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

NSDate* newDate = [oldDate dateByAddingTimeInterval:90]; 

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

1

日期是对象,所以比较指针并不好。无论是将它们转换为常见的时间间隔(浮点):

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:或比较:

4

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

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

对于斯威夫特4

要增加90分钟到Date使用addingTimeInterval(_:)

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

有关的问题,下面

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") 
    } 
}