我正在尝试存储没有任何日期(最好没有时区)信息的时间。例如,一名员工可能在周一至周五的上午9点到晚上11点有空。您不会将其存储为表示那些时间的所有(许多)未来星期一到星期五的每个日期,而是将其存储为您将添加到当前周的日期中的任意时间。
此外,我希望能够将这些时间存储为核心数据管理对象的属性。
我想出的唯一解决方案是将时间存储在NSDateComponent的小时和分钟组件中,但我不确定这将如何与核心数据一起工作。
发布于 2015-01-30 20:33:45
你可以做一些简单的事情,比如创建一个具有3个属性的实体:
(如果需要,扩展为开始和结束小时和分钟)
另一种方法是将date components对象存储为二进制(可转换),但这样就不容易查询了。
发布于 2015-01-30 20:54:37
日期组件是最自然的解决方案,原因您显然已经知道:我们讨论的是日期的部分组件。但是,Core Data本身并不支持date组件。
您可以使用以下内容安全地切换到NSDate
:
- (NSDate *)referenceDate {
return [NSDate dateWithTimeIntervalSinceReferenceDate:0.0];
}
- (NSCalendar *)referenceCalendar {
NSCalendar *calendar = [[NSCalendar alloc]
initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
calendar.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
return calendar;
}
- (NSDate *)canonicalDateForComponents:(NSDateComponents *)components {
NSCalendar *calendar = [[self referenceCalendar]
dateByAddingComponents:components toDate:[self referenceDate] options:0];
}
- (NSDateComponents *)dateComponents:(NSCalendarUnit)components
fromCanonicalDate:(NSDate *)date {
return [[self referenceCalendar] components:components
fromDate:[self referenceDate] toDate:date options:0];
}
然后,您可以存储诸如NSDate *startTime
、NSDate *endTime
、NSDate *startDay
和NSDate *endDay
之类的内容,通过如上所述的转换进行存储和检索。或者适当地组合更多的组件。
发布于 2015-01-31 17:09:22
我在一个核心数据驱动的应用程序中遇到了类似的情况,我发现最实用的方法是简单地存储自午夜以来的分钟数,因此最多1440分钟。(如果需要秒,显然可以乘以60;如果需要秒的分数,则使用浮点数。)
我的Time
实体也有一个工作日属性(1-7)。
这是一个非常简单和实用的解决方案,绝对不需要动脑筋,而且你可以通过整数除法或使用日期组件chacunàson goát轻松可靠地转换日期。
https://stackoverflow.com/questions/28244049
复制