このサイトで複数の方法を試し、いくつかの提案を試しましたが、CoreData属性「dueDate」が「Today」と等しいかどうかを判断するにはどうすればよいですか。NSDateも特定の時間であることはわかっていますが、述語が次の場合に返されるようにします。 1日の時刻に関係なく、同じ日/月/年です。助言がありますか?
6 に答える
これは私が思いついたものです:
- (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];
}
NSDateComonents と NSCalendar を使用してこれを修正しました。
元の NSDate から日/月/年の NSDateComponents を作成し、dateFromComponents を使用して日付に再作成しました。
これにより、1 日の始まりになりました。次に、上記の方法を使用して「明日」の始まりである別の日付を作成し、> と < を使用して「今日」かどうかを確認しました。とにかく助けてくれてありがとう。
今日のコンセプトはトリッキーですが、それはどういう意味ですか? それが簡単ではない理由です。タイムゾーンに関係なく、同じ日、月、年ということですか? 同じ24時間以内ということですか?過去 24 時間以内ですか?複雑になる可能性があります。
上記に対するあなたの答えが、あなたの質問に対する答えを決定します。同じ日、月、年である場合は、NSDateComponents を使用してこれら 3 つの値を抽出し、それらを比較します。24 時間以内を意味する場合は、date メソッドを使用して日付-timeIntervalSinceDate:
間の秒数を決定できます。
別の意味がある場合は、明確にしてください。
迅速な回答
サードパーティを使用したくない場合は、 AFDateHelperを使用します。ソースをチェックして、実装を見つけてdateAtStartOfDay()
くださいdateAtEndOfDay()
それからそよ風。
NSPredicate(format: "pickup_time > %@ && pickup_time < %@",NSDate().dateAtStartOfDay(),NSDate().dateAtEndOfDay())
この種の作業には、Erica Sadun NSDate ユーティリティが役立つ場合があります。
本当に便利な小物がたくさん。見てみな。
https://github.com/erica/NSDate-Extensions
マット
あなたが試してみたいかもしれないいくつかのこと。
- 別の整数属性 dueDateYYYMMDD をエンティティに追加します。NSDateFormatter を使用して NSDate を YYYYMMDD 文字列に変換し、NSString integerValue を使用して dueDateYYYYMMDD を生成します。
- [NSDate date] で NSDateFormatter を使用して「今日」を YYYYMMDD 形式で生成し、[NSString integerValue] を使用して「今日」を整数 (todayInt) として取得します。dueDateYYYYMMDD == todayInt を比較する述語を簡単に作成できるようになりました。
整数値の比較は、文字列よりも効率的です。