3

このサイトで複数の方法を試し、いくつかの提案を試しましたが、CoreData属性「dueDate」が「Today」と等しいかどうかを判断するにはどうすればよいですか。NSDateも特定の時間であることはわかっていますが、述語が次の場合に返されるようにします。 1日の時刻に関係なく、同じ日/月/年です。助言がありますか?

4

6 に答える 6

3

これは私が思いついたものです:

- (NSPredicate *)matchAttribute:(NSString *)attributeName withDate:(NSDate *)date
{
    NSDateComponents *components = [[NSCalendar currentCalendar] components:NSYearCalendarUnit | NSMonthCalendarUnit |  NSDayCalendarUnit fromDate:date];
    NSDateComponents *oneDay = [[NSDateComponents alloc] init];
    oneDay.day = 1;

    NSDate *lastMidnight = [[NSCalendar currentCalendar] dateFromComponents:components];
    NSDate *nextMidnight = [[NSCalendar currentCalendar] dateByAddingComponents:oneDay toDate:lastMidnight options:NSWrapCalendarComponents];

    return [NSPredicate predicateWithFormat:@"(%K >= %@) AND (%K <= %@)", attributeName, lastMidnight, attributeName, nextMidnight];
}

ここここ、そしてここからのインスピレーション。

于 2013-03-14T17:29:19.103 に答える
2

NSDateComonents と NSCalendar を使用してこれを修正しました。

元の NSDate から日/月/年の NSDateComponents を作成し、dateFromComponents を使用して日付に再作成しました。

これにより、1 日の始まりになりました。次に、上記の方法を使用して「明日」の始まりである別の日付を作成し、> と < を使用して「今日」かどうかを確認しました。とにかく助けてくれてありがとう。

于 2010-07-03T18:03:14.037 に答える
1

今日のコンセプトはトリッキーですが、それはどういう意味ですか? それが簡単ではない理由です。タイムゾーンに関係なく、同じ日、月、年ということですか? 同じ24時間以内ということですか?過去 24 時間以内ですか?複雑になる可能性があります。

上記に対するあなたの答えが、あなたの質問に対する答えを決定します。同じ日、月、年である場合は、NSDateComponents を使用してこれら 3 つの値を抽出し、それらを比較します。24 時間以内を意味する場合は、date メソッドを使用して日付-timeIntervalSinceDate:間の秒数を決定できます。

別の意味がある場合は、明確にしてください。

于 2010-07-03T14:25:09.640 に答える
1

迅速な回答

サードパーティを使用したくない場合は、 AFDateHelperを使用します。ソースをチェックして、実装を見つけてdateAtStartOfDay()くださいdateAtEndOfDay()

それからそよ風。

NSPredicate(format: "pickup_time > %@ && pickup_time < %@",NSDate().dateAtStartOfDay(),NSDate().dateAtEndOfDay())

于 2015-11-04T15:59:48.133 に答える
0

この種の作業には、Erica Sadun NSDate ユーティリティが役立つ場合があります。

本当に便利な小物がたくさん。見てみな。

https://github.com/erica/NSDate-Extensions

マット

于 2012-02-29T00:57:20.487 に答える
0

あなたが試してみたいかもしれないいくつかのこと。

  1. 別の整数属性 dueDateYYYMMDD をエンティティに追加します。NSDateFormatter を使用して NSDate を YYYYMMDD 文字列に変換し、NSString integerValue を使用して dueDateYYYYMMDD を生成します。
  2. [NSDate date] で NSDateFormatter を使用して「今日」を YYYYMMDD 形式で生成し、[NSString integerValue] を使用して「今日」を整数 (todayInt) として取得します。dueDateYYYYMMDD == todayInt を比較する述語を簡単に作成できるようになりました。

整数値の比較は、文字列よりも効率的です。

于 2010-07-02T19:34:09.603 に答える