如何比较目标C中的两个NSDate对象

时间:2011-11-18 13:52:13

标签: ios nsdate

我有Date类型的对象。

我想比较它们,我用以下方式写了一个if条件:

if (([startDate1 isEqualToDate:[self getDefaultDate]]) || (startDate1 != [ self getDefaultDate] && m_selectedDate >= m_currentDate1 && cycleStopped))
 {

///execute some condition

}

这种方法我是对还是错?

还有一件事。这样做是对的:

if (dtdate > [m_array objectatIndex:i]
{

}

因为我得到随机行为。

6 个答案:

答案 0 :(得分:74)

以下是使用NSDate方法compare:

的示例
if([startDate compare: endDate] == NSOrderedDescending) // if start is later in time than end
{
    // do something
}

从课程参考:

  

如果...

     

接收者和另一个日子完全相同,   NSOrderedSame。

     

接收者的时间晚于anotherDate,NSOrderedDescending。

     

接收者的时间早于另一个日期,NSOrderedAscending。

如果您想比较两个日期并找到它们之间的秒数,您也可以使用timeIntervalSinceDate:方法。

编辑:

if(([startDate1 compare:[self getDefaultDate]] == NSOrderedSame) || ([startDate1 compare: [self getDefaultDate]] != NSOrderedSame && (([m_selectedDate compare: m_currentDate1] == NSOrderedDescending) || [m_selectedDate compare: m_currentDate1] == NSOrderedSame) && cycleStopped))

答案 1 :(得分:19)

比较NSDates的简便方法(在此处http://webd.fr/637-comparer-deux-nsdate):

#import <Foundation/Foundation.h>

@interface NSDate (Compare)

-(BOOL) isLaterThanOrEqualTo:(NSDate*)date;
-(BOOL) isEarlierThanOrEqualTo:(NSDate*)date;
-(BOOL) isLaterThan:(NSDate*)date;
-(BOOL) isEarlierThan:(NSDate*)date;
//- (BOOL)isEqualToDate:(NSDate *)date; already part of the NSDate API

@end

实施:

#import "NSDate+Compare.h"

@implementation NSDate (Compare)

-(BOOL) isLaterThanOrEqualTo:(NSDate*)date {
    return !([self compare:date] == NSOrderedAscending);
}

-(BOOL) isEarlierThanOrEqualTo:(NSDate*)date {
    return !([self compare:date] == NSOrderedDescending);
}
-(BOOL) isLaterThan:(NSDate*)date {
    return ([self compare:date] == NSOrderedDescending);

}
-(BOOL) isEarlierThan:(NSDate*)date {
    return ([self compare:date] == NSOrderedAscending);
}

@end

简单易用:

if([aDateYouWant ToCompare isEarlierThanOrEqualTo:[NSDate date]]) // [NSDate date] is now
{
    // do your thing ...
}

享受

答案 2 :(得分:4)

我必须承认,我发现&#34;比较&#34; == NSWhatHaveYou业务太难以记住(尽管它是正确的并且有效)。 NSDate还有另外两种方法可以让我的大脑更容易处理:earlyDate和laterDate。

考虑一下:

if ([myDate laterDate:today] == myDate) {
    NSLog(@"myDate is LATER than today");
} else {
    NSLog(@"myDate is EARLIER than today");
}

// likewise:
if ([myDate earlierDate:today] == myDate) {
    NSLog(@"myDate is EARLIER than today");
} else {
    NSLog(@"myDate is LATER than today");
}

任一方法都返回一个NSDate对象,该对象比另一个更早或更晚。

http://pinkstone.co.uk/how-to-compare-two-nsdates/

答案 3 :(得分:3)

我真的很喜欢卢克的回答,它就像一个魅力。

我使用过这样的东西:

If ([enteredDate compare: [NSDate Date]]== NSOrderedSame || NSOrderedDescending)
{
 //Do Something if the enteredDate is later or the same as today
}else
{
//if the enteredDate is before today's date
}

我不确定这是否有帮助,但只是重申卢克所写的内容。

答案 4 :(得分:1)

这是一种简单的方法,可以检查您认为的日期是否比您之前认为的日期更大(例如,将来)。这就是它的作用。

  1. 获取当前和未来日期的时间间隔(秒和frac秒)
  2. 如果您的测试日期更长(时间参考)另一个日期,则
  3. 返回true

    你去吧

    - (BOOL)isDateGreaterThanDate:(NSDate*)greaterDate and:(NSDate*)lesserDate{
    
        NSTimeInterval greaterDateInterval = [greaterDate timeIntervalSince1970];
        NSTimeInterval lesserDateInterval = [lesserDate timeIntervalSince1970];
    
        if (greaterDateInterval > lesserDateInterval) 
            return YES;
    
        return NO;
    }
    

    这也有效

    BOOL *isGreaterDateTruelyGreater = [greaterDate timeIntervalSince1970] > [lesserDate timeIntervalSince1970];
    

    Objective-c处理日期的方式不太直观。基本上,您可以使用NSTimeInterval来获取某个时间点的秒数。它通常给出一个很长的数字,例如我正在写这个1351026414.640865是从1970年开始的时间间隔。

    时间点&gt;时间点 1351026415.640865&gt; 1351026414.640865 以上是1秒,所以这是真的。

答案 5 :(得分:0)