我想比较两个日期,但我看不出它是如何工作的......
这是我正在使用的代码:
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条件......任何原因?
答案 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;
}
这些常量用于指示请求中的项目是如何排序的。
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;
}