比较NSDate和[NSDate日期]最快的方式?

时间:2012-09-09 06:14:51

标签: iphone ios date sdk nsdate

我有一个核心数据表视图,我正在比较日期。我目前使用的方法是:if ([todayDate compare: [NSDate date]]==NSOrderedAscending)。这完美但速度慢。我不需要知道时间上的差异。非常感谢任何帮助!

4 个答案:

答案 0 :(得分:1)

我真的认为,NSDates方法isEqualToDate:就是您要搜索的内容。我似乎是回答你问题的Apple方式:

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

答案 1 :(得分:1)

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

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

答案 2 :(得分: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 );

答案 3 :(得分:0)

我没有测量过,但您可能想尝试:

NSTimeInterval i = [todayDate timeIntervalSinceNow];

结果(i)可能是正面的还是负面的。

您也可以尝试CFDateCompare

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