データモデルオブジェクトの保存にはCoreDataを使用しています。各オブジェクトにはNSDateプロパティがあります。
NSDateプロパティの形式は次のとおりです。
2013-03-18 12:50:31 +0000
この値だけで時間なしにオブジェクトをフェッチする述語を作成する必要があります2013-03-18
。
データモデルオブジェクトの保存にはCoreDataを使用しています。各オブジェクトにはNSDateプロパティがあります。
NSDateプロパティの形式は次のとおりです。
2013-03-18 12:50:31 +0000
この値だけで時間なしにオブジェクトをフェッチする述語を作成する必要があります2013-03-18
。
日付が実際の日付として保存されている場合は、フォーマットをいじるのではなく、それを有利に使用する必要があります。日付が2つの日付(時間付き)の間にあるかどうかをチェックする述語を作成するだけです。最初の日付は00:00:00の日付で、2番目の日付はその1日後の日付です。
// Create your date (without the time)
NSDateComponents *yourDate = [NSDateComponents new];
yourDate.calendar = [NSCalendar currentCalendar];
yourDate.year = 2013;
yourDate.month = 3;
yourDate.day = 18;
NSDate *startDate = [yourDate date];
// Add one day to the previous date. Note that 1 day != 24 h
NSDateComponents *oneDay = [NSDateComponents new];
oneDay.day = 1;
// one day after begin date
NSDate *endDate = [[NSCalendar currentCalendar] dateByAddingComponents:oneDay
toDate:startDate
options:0];
// Predicate for all dates between startDate and endDate
NSPredicate *dateThatAreOnThatDay =
[NSPredicate predicateWithFormat:@"(date >= %@) AND (date < %@)",
startDate,
endDate]];
Davidは述語を作成する方法を示しましたが、0:00の日付を生成する簡単な方法を追加したいと思います。
NSDate *startDate = [NSDate date];
NSTimeInterval lengthDay;
[[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit
startDate:&startDate
interval:&lengthDay
forDate:startDate];
startDate
0:00
今日の現在のタイムゾーンを表す日付が含まれるようになりました
NSDate *endDate = [startDate dateByAddingTimeInterval:lengthDay];
これで、それを述語に入れることができます
NSPredicate *daySpanPredicate = [NSPredicate predicateWithFormat:@"(date >= %@) AND (date < %@)", startDate, endDate];
改善してくれたMartinRに感謝します。