目标C,比较两个日期
问题描述:
我想比较两个日期,但我看不到它是如何工作在所有...目标C,比较两个日期
这是我使用的代码:
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条件......任何原因?
答
result1和result2的值是以下值之一。
enum {
NSOrderedAscending = -1,
NSOrderedSame,
NSOrderedDescending
};
typedef NSInteger NSComparisonResult;
唯一的一次(RESULT2 & & RESULT1)将不会返回true是当他们中的一个计算结果为,如果其中一个日期,是完全一样的,现在假或0这只发生。
if (result1 == NSOrderedAscending) {
// result1 is in the future
}
if (result1 == NSOrderedDescending) {
// result1 is in the past
}
答
NSComparisonResult
不是布尔值。 See the documentation。根据您想要如何输入,您应该检查NSOrderedAscending
(现在更早),NSOrderedSame
(相同日期)或NSOrderedDescending
(现在更晚)。
答
试试这个。
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;
答
通过使用此功能,您可以比较两个日期。这是经过测试的功能,并在我的最后工作正常。
-(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;
}