iOS:比较两个较less或相等的NSDates

我想比较两个date,并做一些事情,当一个是比另一个更小或相等,我试图这样做:

if ([self.system.systemInbetriebnahme compare:date] == NSOrderedDescending) return nil; 

但是,当他们都是平等的有没有办法比较date>=

谢谢

更多细节:我有一个date取自一个二维数组,我有一个date存储在核心数据(通过dateselect器),我通过一个循环来比较两个date的规则:数组中的date必须是大于或等于数据库中存储的inputdate。

最新编辑:

  • 我导入一个CSV文件,parsing和格式后给我两行(一个数字值和一个date)。 在这里我对date感兴趣。

  • 我将所有这些存储在一个数组中,并在检查此函数中数据的一致性之后进行保存:

     for (NSArray * row in array) { // Handle import if there are at least two rows if (row.count > 1) { dispatch_sync(dispatch_get_main_queue(), ^{ // Try to import value,date formatted row double value = [row[0] doubleValue]; NSDate * date = [dateFormatter dateFromString:row[1]]; //else { // Try to import date,value row if (date && value != 0.0) { [self addReading:value forDate:date]; } 
  • 在这里我调用函数addreading来检查一些规则的错误,如果一切都是okey,那么我保存managedObject上下文。

      if ([installationdatum compare:date] != NSOrderedAscending) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"installation date is bigger than data" delegate: nil cancelButtonTitle:@"OK" otherButtonTitles:nil] [alert show]; return nil; } else { //Do nothing } 
  • 对我来说,一个规则是获取数组中的第一行元素,并将其date与已存储在数据库中的input进行比较,该input是self.system.systemInbetriebnahme

  • 毕竟,我列出了所有在tableview中得到的数组,尽pipe价值匹配NSOrderedSame不会显示,当它等于self.system.systemInbetriebnahme

只需检查是不是升序。

 if ([self.system.systemInbetriebnahme compare:date] != NSOrderedAscending) return nil; 

简单…

 if ([date1 compare:date2] == NSOrderedDescending) { NSLog(@"date1 is later than date2"); } else if ([date1 compare:date2] == NSOrderedAscending) { NSLog(@"date1 is earlier than date2"); } else { NSLog(@"dates are the same"); } 
 NSDate *toDay = [[NSDate alloc]init]; NSLog(@"%@",toDay); NSLog(@"%@",yourSecondDate); if ([toDay timeIntervalSinceDate:yourSecondDate] < 30.0f) { NSLog(@"Do Something"); } 

那么> =就意味着他们是!<,所以你可以检查

 if ([self.system.systemInbetriebnahme compare:date] != NSOrderedAscending) 

您可以检查结果是否等于NSOrderedDescendingNSOrderedSame

 NSComparisonResult comparisonResult = [self.system.systemInbetriebnahme compare:date] if (comparisonResult == NSOrderedDescending || comparisonResult == NSOrderedSame) return nil; 

或者只是不匹配剩下的一个选项:

 NSComparisonResult comparisonResult = [self.system.systemInbetriebnahme compare:date] if (comparisonResult != NSOrderedAscending) return nil; 

在你的情况下,我会去后面的选项,因为你只有3个选项检查一个你不想要的是最简单的。

我认为这会帮助你。 do something when one is less or equal than the other as you看起来不同的情况下, do something when one is less or equal than the other as you

 switch ([self.system.systemInbetriebnahme compare: date]) { case NSOrderedAscending: // system date earlier then date break; case NSOrderedSame: // Same break; case NSOrderedDescending: // system date later then date break; } 

没有直接的比较像> =但是你可以这样做

 NSComparisonResult compareStart = [date1 compare: selectedDate]; // date1 is 6/6/2011 00:00 NSComparisonResult compareEnd = [date2 compare: selectedDate]; // date2 is 9/6/2011 00:00 if ((compareStart == NSOrderedAscending) || (compareStart == NSOrderedSame) && (compareEnd == NSOrderedDescending)) { // date is in the right range } 

或者你只是比较

 if ((compareStart == NSOrderedAscending) ) { // date is in the right range } 

为了com [是两个NSDate ,这个:

 [[date1 earlierDate:date2] isEqualToDate: date1] 

如果date1早于date2,则返回YES

编辑

如果你想date1> = date2(以后或等于)使用这个条件:

 ([[date1 laterDate:date2] isEqualToDate: date1] || [date2 isEqualToDate:date1])