如何在objective C中比较两个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]
{
}

因为我得到了随机行为

下面是使用NSDate方法的示例,compare:

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

来自类引用:

如果……

接收器和anotherDate彼此完全相等,NSOrderedSame .

接收方时间晚于anotherDate, nsordereddescent .

接收时间早于anotherDate, 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))

比较nsdate的简单方法(在这里找到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 ...
}
享受

我必须承认,我发现"compare" == NSWhatHaveYou的业务太复杂了,难以记住(即使它是正确的,它是有效的)。NSDate还有另外两个方法,我觉得它们更容易处理:alererdate和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/

我真的很喜欢Luke的回答,而且效果很好。

我用的是这样的:

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
}

我不确定这是否有帮助,但只是重申一下卢克写的

这是一种简单的方法来检查您认为日期是否较大(例如:在未来)与你认为更早的日期相比。下面是它的作用:

  1. 获取当前和未来日期的时间间隔(秒和压裂秒)
  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年开始的时间间隔。

时间点>时间点1351026415.640865> 1351026414.640865以上内容提前了1秒,所以是正确的

这个链接以最好的方式展示了它:

http://www.myuiviews.com/2011/01/10/nsdate-comparison-which-is-older.html