iOS:比较两个更少或相等的NSDates

时间:2013-08-27 12:30:49

标签: ios objective-c nsdate

我想比较两个日期,当一个日期少于或等于另一个时,我会尝试这样做:

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

但是这样可以消除它们相同的情况,是否可以将日期与>=进行比较?

谢谢

更多细节:我有一个双维数组的日期,我有一个日期存储在核心数据(通过日期选择器),我通过循环来比较两个日期规则:数组中的日期必须大于或等于存储在数据库中的输入日期。

最新修改:

  • 我导入了一个csv文件,在解析和格式化之后给我两行(一行用于数字值,一行用于日期)。在这里,我对约会很感兴趣。

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

    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 Context。

     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
    
                   }
    
  • 对我来说,一条规则就是获取数组中的第一行元素,并将其日期与已存储在数据库中的输入进行比较,即self.system.systemInbetriebnahme

  • 在所有这些之后,我在tableview中列出了所有结果数组,但是当它等于NSOrderedSame

  • 时,永远不会显示值匹配self.system.systemInbetriebnahme

8 个答案:

答案 0 :(得分:12)

...简单

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");

}

答案 1 :(得分:11)

只需检查不升序。

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

答案 2 :(得分:3)

NSDate *toDay = [[NSDate alloc]init];

NSLog(@"%@",toDay);

 NSLog(@"%@",yourSecondDate);

if ([toDay timeIntervalSinceDate:yourSecondDate] < 30.0f) 
 {
    NSLog(@"Do Something");
 }

答案 3 :(得分:1)

嗯&gt; =只是意味着它们是!&lt;,所以你可以检查

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

答案 4 :(得分:1)

您可以检查结果是否等同于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个选项可以检查你不想要的最简单的选项。

答案 5 :(得分:0)

我认为这会对你有所帮助。 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;
}

答案 6 :(得分:0)

没有像&gt; =这样的直接比较,但你可以像这样做

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
}

答案 7 :(得分:0)

要com [是两个NSDate,这个:

[[date1 earlierDate:date2] isEqualToDate: date1]
如果date1早于date2,则

返回YES

修改

如果你想要date1&gt; = date2(更晚或等于),请使用以下条件:

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