コア データから取得した NSManagedObject の配列があり、今日の日付 >= で配列をフィルター処理したいので、次のようにします。
NSPredicate *pred = [NSPredicate predicateWithFormat:@"(firstAired >= %@)", [NSDate date]];
しかし、今日の日付だけが表示され、今日の日付は表示されないのはなぜですか?
コア データから取得した NSManagedObject の配列があり、今日の日付 >= で配列をフィルター処理したいので、次のようにします。
NSPredicate *pred = [NSPredicate predicateWithFormat:@"(firstAired >= %@)", [NSDate date]];
しかし、今日の日付だけが表示され、今日の日付は表示されないのはなぜですか?
NSDate *now = [NSDate date];
NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
calendar.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:now];
[components setHour:00];
NSDate *today = [calendar dateFromComponents:components];
このように機能します、すべてのおかげで...
このように真夜中の日付を作成し、それを述語に渡す必要があります
NSDateComponents *currentComponents = [[NSCalendar currentCalendar]components:NSMinuteCalendarUnit|NSHourCalendarUnit|NSSecondCalendarUnit fromDate:[NSDate date]];
[currentComponents setMinute:0];
[currentComponents setHour:0];
[currentComponents setSecond:0];
NSCalendar *calendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *dateToCheck = [calendar dateFromComponents:currentComponents];
[NSDate date]
現在時刻です。したがって、この述語は、firstAired が今日以降であり、今日より前ではないレコードのみをフェッチします。NSDate
時刻 00:00:00 で を作成します。
[NSDate date] は、実行された瞬間の時、分、秒 .... で正確な日付を返すためです。すべての「今日」の項目を検索する場合は、[NSDate date] を今日の真夜中の NSDate オブジェクトで変更する必要があります。つまり、NSDate.date から日付コンポーネントを抽出し、年、月、日のコンポーネントを使用して、時間: 00:00AM の新しい日付オブジェクトを作成します。