用nsdate比较两个date

在我的应用程序,我必须比较两次:当前(这是12:44),并给予我尝试:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"hh:mm"]; NSDate *neededDate = [[NSDate alloc] init]; neededDate = [dateFormatter dateFromString:@"14:45"]; if ([neededDate compare:[NSDate date]] == NSOrderedAscending) { NSLog(@"yes"); } else NSLog(@"no"); [neededDate release]; [dateFormatter release]; 

但是任何时候启动它,NSLog都会说“不”。 请,build议我错在哪里。 先谢谢你。

因为你需要的neededDate将等于"1970/01/01 14:45"

您需要设置正确的年份和date。

你可以得到当前的年份,月份,并说,例如,使用下一个方法:

 NSDateComponents *components = [[NSCalendar currentCalendar] components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:[NSDate date]]; NSLog(@"Current year: %d", components.year); NSLog(@"Current month: %d", components.month); NSLog(@"Current day: %d", components.day); 

我认为问题在这里:

 [dateFormatter setDateFormat:@"hh:mm"]; 

应该:

 [dateFormatter setDateFormat:@"HH:mm"]; 

因为现在“14:45”它返回(空)date

(这是除了之前的答案:)

这意味着在您的情况下,neededDate总是高于当前date。 这可能是因为您以24小时格式存储了48小时的string。 将string更改为HH:mm

另外,validation您存储在neededDate中的值。

这是一个小例子

 NSDate *neededDate = [[NSDate date] dateByAddingTimeInterval:5]; if ([neededDate compare:[NSDate date]] == NSOrderedAscending) { NSLog(@"asc"); } else { NSLog(@"dec"); } 

在这种情况下,dec将被打印。