为什么不能使用<或>比较NSDate?

NSDate *date = [NSDate date]; NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init]; [dateFormat setDateFormat:@"MM/dd/yyyy"]; NSLog([@"today is " stringByAppendingString:[dateFormat stringFromDate:date]]); NSLog([@"firstBirthdayDate is " stringByAppendingString:[dateFormat stringFromDate:firstBirthdayDate]]); NSLog([@"secondBirthdayDate is " stringByAppendingString:[dateFormat stringFromDate:secondBirthdayDate]]); if ([firstBirthdayDate isEqualToDate:secondBirthdayDate]) NSLog(@"First date is the same as second date"); if (firstBirthdayDate < date) NSLog(@"First date is earlier than today"); else NSLog(@"First date is later than today"); if (secondBirthdayDate < date) NSLog(@"Second date is earlier than today"); 
  • 今天是2012年8月11日
  • firstBirthdayDatefirstBirthdayDate
  • secondBirthdayDate是01/23/2012

以下是我在日志中获得的内容:

第一个date与第二个date相同

第一个date比今天晚

第二个date比今天早

我想我疯了…

使用if ([date1 isEqualToDate:date2])来比较两个date,否则您可以使用以下内容,

 if ([date1 compare:date2] == NSOrderedSame) if ([date1 compare:date2] == NSOrderedAscending) if ([date1 compare:date2] == NSOrderedDescending) 

><=仅用于比较非指针。 基本上我的理解是,当你使用这些运算符时,它可能会比较内存地址而不是数值。 所以你会得到意想不到的结果。

从逻辑上讲,这是如何工作的:

  if (obj1 > obj2) { return NSOrderedDescending; } if (obj1 < obj2) { return NSOrderedAscending; } if (obj1 == obj2) { return NSOrderedSame; } 

您可以使用任何比较语句来比较date。

您不能使用<>来比较date。 你必须使用正确的方法。 看看这个post。

  if ([date compare:firstBirthdayDate] == NSOrderedAscending){ NSLog(@"First date is earlier than today"); } else{ NSLog(@"First date is later than today"); } if ([date compare:secondBirthdayDate] == NSOrderedAscending){ NSLog(@"Second date is earlier than today"); } if ([firstBirthdayDate compare: secondBirthdayDate] == NSOrderedSame) NSLog(@"First date is the same as second date"); 

简而言之:因为基本操作符只对任何OBJECT <>!= ==的基本types工作…对这个variables的POINTER值做一个基本的操作

在c ++中,那些运算符可以在objC和java等语言中被覆盖,您需要使用NSObject的isEqual函数