EAB*_*EAB 0 logic date nsdate nspredicate
我正在建立一个NSPredicate来获取Core Data,它的设置如下:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(date >= %@) AND (date <= %@)", todaysDate, tomorrowsDate];
Run Code Online (Sandbox Code Playgroud)
我需要todaysDate今天00:00:00,我需要tomorrowsDate今天23:59:59.
我不能设置todaysDate等于[NSDate date]然后用NSDateComponents操纵小时,分钟和秒,因为[NSDate date]给我一个比我当地实际时间提前5小时的日期(所以如果它是在5月6日晚上11点,那么[NSDate date]会给我"2014-05-07 04:00:00 +0000",但我仍然需要它认为它是5月6日,而不是7日!).
我如何操纵我在Xcode中使用的工具,以便始终将我的变量todaysDate变为今天午夜,并tomorrowsDate在明天午夜之前成为第二个?
该rangeOfUnit:...方法NSCalendar是计算当前的一天的开始,明天开始一个方便的方法
在你的本地时区:
NSDate *now = [NSDate date];
NSCalendar *cal = [NSCalendar currentCalendar];
NSDate *todaysDate;
NSDate *tomorrowsDate;
NSTimeInterval interval;
[cal rangeOfUnit:NSDayCalendarUnit startDate:&todaysDate interval:&interval forDate:now];
tomorrowsDate = [todaysDate dateByAddingTimeInterval:interval];
Run Code Online (Sandbox Code Playgroud)
这样你就可以在谓词中使用它>=和<:
[NSPredicate predicateWithFormat:@"(date >= %@) AND (date < %@)", todaysDate, tomorrowsDate]
Run Code Online (Sandbox Code Playgroud)
获取当天的所有对象.
备注:不要让对象的NSLog()输出NSDate混淆你.
NSDate代表一个绝对的时间点,对时区一无所知.
NSLog(@"%@", todaysDate)根据GMT时区而不是您当地的时区打印日期.
要根据您的时区打印日期,请p todaysDate在调试器控制台(而不是po)中使用,或打印
[todaysDate descriptionWithLocale:[NSLocale currentLocale]]
Run Code Online (Sandbox Code Playgroud)