2011-06-10 37 views
2

我有這個代碼的問題:問題有兩個NSDate的

NSDate *today = [[NSDate alloc] init]; 
if (dateOne == today) { 
dataLabel.textColor = [UIColor redColor]; NSLog(@"inside if");} 
NSLog(@"today:%@", oggi); 
NSLog(@"dateOne:%@", dateOne); 

控制檯的結果是

2011-06-10 17:19:00.170 Project[678:707] today:2011-06-10 15:19:00 +0000 
2011-06-10 17:19:00.174 Project[678:707] dateOne:2011-06-10 15:19:00 +0000 

我也嘗試「isEqualToDate」但這些代碼不會進入內部「如果「

回答

9

我知道您正試圖確定給定的NSDate是否爲今天。要做到這一點,您不必考慮比較中的小時,分​​鍾等。這個怎麼樣:因爲它檢查給定的日期是否完全相等的接收器(在一秒精度)

NSCalendar *calendar = [NSCalendar currentCalendar]; 
NSDateComponents *components = [calendar components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:[NSDate date]]; 
NSDate *today = [calendar dateFromComponents:components]; 
components = [calendar components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:otherDate]; 
NSDate *dateOne = [calendar dateFromComponents:components]; 

if([today isEqualToDate:dateOne]) { 
    ... 
} 

方法isEqualToDate:不會做工作。

==運算符不適合此操作,因爲它比較指向對象的指針,它會檢查指針是否指向相同的內存位置。

+1

此答案對我來說非常有用。謝謝小給你。 – 2013-03-26 10:51:12

+0

非常歡迎@ArpitParekh :) – albertamg 2013-03-27 19:37:54

0

==比較指針,看它們是否指向相同的對象 - 不是對象本身的值。要比較日期,請使用-[NSDate isEqualToDate:]

if ([dateOne isEqualToDate:today]) { 
    dataLabel.textColor = [UIColor redColor]; 
    NSLog(@"inside if"); 
}