2012-09-09 51 views
-3

我有一个核心数据表视图,我比较日期。我目前使用的方法是:if ([todayDate compare: [NSDate date]]==NSOrderedAscending)。这工作完美但缓慢。我不需要知道时间的不同。任何帮助深表感谢!比较NSDate与[NSDate日期]最快的方法?

+0

你能更准确地说明什么是慢吗?它是'[NSDate date]'还是比较?你如何衡量缓慢? - 如果你需要'[NSDate date]'在一个包含许多元素的循环中,你只需要计算一次,这可能已经有所帮助了。 –

回答

1

我真的认为,NSDates方法isEqualToDate:是你正在寻找。在我看来,是苹果的方式来回答你的问题:

NSDate *date1 = ...; 
NSDate *date2 = ...; 

BOOL datesAreEqual = [date1 isEqualToDate:date2]; 

欲了解更多信息,请访问https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsdate_Class/Reference/Reference.html

+0

嘿,感谢您的帮助,但它只告诉我日期是否等于或小于或大于。尽管谢谢您的帮助! – iDeveloper

+0

您应该阅读文档中的“比较日期”部分:http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/Reference/Reference.html In你需要知道的情况下我会使用' - (NSDate *)earlierDate:(NSDate *)anotherDate' –

1

一种选择是不实际创建一个新的NSDate对象,但使用时间间隔进行比较。不知道性能,但可能值得一试。

if ([todayDate timeIntervalSinceReferenceDate] > [NSDate timeIntervalSinceReferenceDate]) { 
... 
} 
0

我没有测量它,但你可能也想尝试:

NSTimeInterval i = [todayDate timeIntervalSinceNow]; 

其中结果(i)可以是正的或负的。

您也可以尝试CFDateCompare

或者您可能想要考虑另一种表示数据库中某个时间点的方式 - 例如CFTimeInterval(代表公共参考时间的秒数double)。

1

你应该还记得在一个局部变量的当前日期或当前时间戳:

NSTimeInterval current = [NSDate timeIntervalSinceReferenceDate]; 

后来使用该值对所有的比较:

myTimestamp = [myDate timeIntervalSinceReferenceDate] 

if (myTimestamp == current) { 
    return NSOrderedSame; 
} else if (myTimestamp > current) { 
    return NSOrderedDescending; 
} else { 
    return NSOrderedAscending; 
} 

或者更快的方法,使用C函数:

// Get the current calendar time as a time_t object. 
time_t time (time_t * timer); 

// Return difference between two times 
double difftime (time_t time2, time_t time1);