-2

我想比较两个日期并在一个日期小于或等于另一个日期时做某事,我尝试这样做:

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来检查某些规则的错误,如果一切正常,则保存 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
    
                   }
    
  • 我的一个规则是获取数组中的第一行元素并将其日期与已经存储在数据库中的输入进行比较,即self.system.systemInbetriebnahme

  • 毕竟,我在表格视图中列出了所有结果数组,尽管NSOrderedSame当它等于时永远不会显示值匹配self.system.systemInbetriebnahme

4

8 回答 8

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

}
于 2013-08-27T12:34:53.217 回答
11

只需检查不是升序。

if ([self.system.systemInbetriebnahme compare:date] != NSOrderedAscending)
        return nil;
于 2013-08-27T12:34:27.757 回答
3
NSDate *toDay = [[NSDate alloc]init];

NSLog(@"%@",toDay);

 NSLog(@"%@",yourSecondDate);

if ([toDay timeIntervalSinceDate:yourSecondDate] < 30.0f) 
 {
    NSLog(@"Do Something");
 }
于 2013-08-27T12:35:59.160 回答
1

嗯 >= 只是意味着他们是!<,所以你可以检查

if ([self.system.systemInbetriebnahme compare:date] != NSOrderedAscending)
于 2013-08-27T12:35:21.070 回答
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 个选项,检查你不想要的选项是最简单的。

于 2013-08-27T12:35:23.840 回答
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;
}
于 2013-08-27T12:34:28.073 回答
0

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

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
}
于 2013-08-27T12:36:51.420 回答
0

com[有两个NSDate,这个:

[[date1 earlierDate:date2] isEqualToDate: date1]

YES如果 date1 早于 date2,则返回。

编辑

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

([[date1 laterDate:date2] isEqualToDate: date1] || [date2 isEqualToDate:date1])
于 2013-08-27T12:49:40.253 回答