-3

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

4

4 回答 4

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

于 2012-09-09T08:04:59.877 回答
1

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

if ([todayDate timeIntervalSinceReferenceDate] > [NSDate timeIntervalSinceReferenceDate]) {
...
}
于 2012-09-09T08:19:06.177 回答
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 );
于 2012-09-09T08:47:05.813 回答
0

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

NSTimeInterval i = [todayDate timeIntervalSinceNow];

其中结果 ( i) 可能是正数或负数。

你也可以试试CFDateCompare

或者您可能想考虑另一种表示数据库中时间点的方法——例如 a CFTimeInterval(adouble表示距公共参考时间的秒数)。

于 2012-09-09T08:25:30.497 回答