核心数据从本周获得数据

时间:2012-03-18 13:46:19

标签: iphone ios core-data

我有一个核心数据上下文,其中包含存储日期的对象。我想按顺序获取本周(周一至周日)的数据。我不是在寻找最近7天。

日期可以是存储在实体中的日期,也可以是将对象添加到核心数据时的数据(它们是相同的)。

我可以使用带有开始日期和结束日期的谓词,如下所示:

NSPredicate *weekPredicate = [NSPredicate predicateWithFormat:@"((date > %@) AND (date <= %@)) || (date = nil)",startDate,endDate];

但是如何计算startDate和endDate?

3 个答案:

答案 0 :(得分:3)

-(NSDate *) lastMondayBeforeDate:(NSDate*)timeStamp {
   NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
   NSDateComponents *comps = 
      [gregorian components:NSWeekdayCalendarUnit fromDate:timeStamp];
   NSInteger weekday = [comps weekday];
   weekday = weekday==1 ? 6 : weekday-2; // start with 0 on Monday rather than 1 on Sunday
   NSTimeInterval secondsSinceMondayMidnight =  
     (NSUInteger) [timeStamp timeIntervalSince1970] % 60*60*24 + weekday * 60*60*24;
   return [timeStamp dateByAddingTimeInterval:-secondsSinceMondayMidnight];
}

-(NSDate *) nextMondayAfterDate:(NSDate*)timeStamp {
   return [[self lastMondayBeforeDate:timeStamp] 
      dateByAddingTimeInterval:60*60*24*7];
}

答案 1 :(得分:1)

声明您只需要从星期一开始的当前一周意味着结束日期将是&#34;今天&#34;和开始日期:&#34;上周一&#34;。

请参阅Apple的文档:

  

有三个主要类用于处理日期和时间。

     

NSDate允许您表示绝对时间点。

     

NSCalendar允许您表示特定日历,例如格里高利或希伯来日历。它为大多数基于日期的计算提供了接口,并允许您在NSDate对象和NSDateComponents对象之间进行转换。

     

NSDateComponents允许您表示特定日期的组件,例如小时,分钟,日,年等。

     

除了这些课程,NSTimeZone还允许您表示地缘政治区域的时区信息。它简化了跨越不同时区工作的任务,并执行可能受夏令时转换影响的计算。

然后,您将能够查看我们目前所处的哪一天:

NSDateComponents具有此方法,例如:

- (NSInteger)weekday
  

返回值   接收器的工作日单位数。

     

讨论   工作日单位是数字1到n,其中n是一周中的天数。例如,在公历中,n为7,星期日由1表示。

这是指向date and time programming guide

的链接

答案 2 :(得分:1)

过去曾经过很多日期和时间的人的建议。日期会变得混乱!没有办法绕过它。最后,你会发现很多很多代码和日期组件飞到各处,更不用说日历和时区了,只是为了计算你认为只需要一点数学的东西。你真的应该看看臭名昭着的Erica Sadun的NSDate类别。(NSDate-Extentions)。

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

我不知道我多么希望我能早点找到它。另请阅读Apple Doc的日期和编程指南,当你再次读完它时,它至少不是轻读。

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/DatesAndTimes/Articles/dtDates.html

(我知道,这是评论而不是答案。)

相关问题