-3

コア データ テーブル ビューがあり、日付を比較しています。私が現在使用している方法は次のとおりif ([todayDate compare: [NSDate date]]==NSOrderedAscending)です。これは完全に機能しますが、遅いです。時間の違いを知る必要はありません。どんな助けでも大歓迎です!

4

4 に答える 4

1

isEqualToDate:NSDatesメソッドがあなたが探しているものだと私は本当に思います。私にはあなたの質問に答える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

ローカル変数に現在の日付または現在のタイムスタンプを覚えておく必要があります。

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 に答える
1

1 つのオプションとして、実際に新しいNSDateオブジェクトを作成するのではなく、比較のために時間間隔を使用することができます。性能についてはわかりませんが、試してみる価値はあります。

if ([todayDate timeIntervalSinceReferenceDate] > [NSDate timeIntervalSinceReferenceDate]) {
...
}
于 2012-09-09T08:19:06.177 に答える
0

私はそれを測定していませんが、あなたは試してみたいかもしれません:

NSTimeInterval i = [todayDate timeIntervalSinceNow];

ここで、結果(i)は正または負の場合があります。

また、試してみてくださいCFDateCompare

または、データベース内のある時点を表す別の方法を検討することもできます。たとえば、CFTimeIntervaldouble一般的な参照時刻からの秒数を表す)などです。

于 2012-09-09T08:25:30.497 に答える