2011-06-10 62 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"); 
}