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

时间:2012-11-09 04:09:00

标签: iphone objective-c ios 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");
  • 今天是11/08/2012
  • firstBirthdayDate是01/23/2012
  • secondBirthdayDate是01/23/2012

这是我在日志中得到的内容:

  

第一个日期与第二个日期相同

     

第一个日期晚于今天

     

第二个日期早于今天

我想我疯了......

4 个答案:

答案 0 :(得分:7)

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

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;
    }

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

答案 1 :(得分:0)

您无法使用<>来比较日期。你必须使用正确的方法。看看this帖子。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

简而言之:因为基本运算符只适用于基本类型 任何OBJECT&lt; &GT; != == ...对此变量的POINTER值执行基本操作

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