目标C,比较两个日期

时间:2012-02-16 19:56:36

标签: ios objective-c nsdate

我想比较两个日期,但我看不出它是如何工作的......

这是我正在使用的代码:

   NSCalendar* myCalendar = [NSCalendar currentCalendar];
    NSDateComponents* components = [myCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit 

                                                 fromDate:[NSDate date]];
    [components setYear:2012];
    [components setMonth:03];
    [components setDay:25];
    NSDate *startDate = [myCalendar dateFromComponents:components];


    NSDateComponents* components2 = [myCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit 

                                                 fromDate:[NSDate date]];
    [components2 setYear:2012];
    [components2 setMonth:04];
    [components2 setDay:25];
    NSDate *endDate = [myCalendar dateFromComponents:components];

    NSComparisonResult result1 = [now compare:startDate];
    NSComparisonResult result2 = [now compare:endDate];

    if (result2 &&

        result1
        ) {
        int x =1;
    }

即使两个日期都在将来,我仍然可以进入if条件......任何原因?

4 个答案:

答案 0 :(得分:2)

result1和result2的值是以下之一。

enum {
    NSOrderedAscending = -1,
    NSOrderedSame,
    NSOrderedDescending
};
typedef NSInteger NSComparisonResult;

唯一的时间(result2&& result1)不会返回true,当其中一个评估为false或0时。只有当其中一个日期与现在完全相同时才会发生。

if (result1 == NSOrderedAscending) {
    // result1 is in the future
}

if (result1 == NSOrderedDescending) {
    // result1 is in the past
}

答案 1 :(得分:1)

NSComparisonResult不是布尔值。 See the documentation。根据您要输入的方式,您应该检查NSOrderedAscending(现在是更早),NSOrderedSame(相同日期)或NSOrderedDescending(现在更晚)。

答案 2 :(得分:0)

试试这个。

NSCalendar* myCalendar = [NSCalendar currentCalendar];
    NSDateComponents* components = [myCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit 

                                                 fromDate:[NSDate date]];
    [components setYear:2012];
    [components setMonth:03];
    [components setDay:25];
    NSDate *startDate = [myCalendar dateFromComponents:components];


    NSDateComponents* components2 = [myCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit 

                                                 fromDate:[NSDate date]];
    [components2 setYear:2012];
    [components2 setMonth:04];
    [components2 setDay:25];
    NSDate *endDate = [myCalendar dateFromComponents:components];

    NSComparisonResult result1 = [now compare:startDate];
    NSComparisonResult result2 = [now compare:endDate];

    if (result2 == NSOrderedSame && result1 == NSOrderedSame ) {
        int x =1;
    }  

NSComparisonResult

这些常量用于指示请求中的项目是如何排序的。

enum {
    NSOrderedAscending = -1,
    NSOrderedSame=0,
    NSOrderedDescending=1
};
typedef NSInteger NSComparisonResult;

答案 3 :(得分:0)

通过使用此功能,您可以比较两个日期。这是经过测试的功能,并且我的工作正常。

-(BOOL)dateComparision:(NSDate*)date1 andDate2:(NSDate*)date2{

BOOL isTokonValid;

if ([date1 compare:date2] == NSOrderedDescending) {
    NSLog(@"date1 is later than date2");
    isTokonValid = YES;
} else if ([date1 compare:date2] == NSOrderedAscending) {
    NSLog(@"date1 is earlier than date2");
    isTokonValid = NO;
} else {
    isTokonValid = NO;
    NSLog(@"dates are the same");
}

return isTokonValid;

}