如何存储任意时间

时间:2015-01-30 20:27:11

标签: ios macos cocoa core-data

我正在尝试存储没有任何日期(最好是没有时区)信息的时间。例如,员工可能在周一至周五上午9点至晚上11点之间可用。你不会将这个存储为每个代表那些时间(很多)未来周一至周五的日期,而是将你添加到当前日期的任意时间。

此外,我希望能够将这些时间存储为Core Data Managed Object的属性。

我提出的唯一解决方案是将时间存储在NSDateComponent的小时和分钟组件中,但我不确定它如何与Core Data一起使用。

3 个答案:

答案 0 :(得分:3)

您可以像创建具有3个属性的实体一样简单:

  1. 星期几
  2. 一天中的小时
  3. 分钟
  4. (如果需要,扩展到开始和结束小时和分钟)

    另一种方法是将日期组件对象存储为二进制(可转换),但您无法轻松查询。

答案 1 :(得分:1)

日期组件是最自然的解决方案,因为您显然已经意识到这一点:我们所讨论的是日期的固有部分组成部分。但是,Core Data本身并不支持日期组件。

您可以安全地切换到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 *startTimeNSDate *endTimeNSDate *startDayNSDate *endDay之类的内容,通过如上所述进行转换来存储和检索每个内容。或者根据需要组合更多组件。

答案 2 :(得分:0)

我在核心数据驱动的应用程序中遇到了类似的情况,我发现从午夜开始存储分钟数最为实用,所以最多只能存储1440分钟。(如果你需要秒数,显然可以乘以60,或者如果你需要几秒钟,请使用浮点数。)

我的Time实体也有工作日属性(1-7)。

这是一个非常简单实用的解决方案,绝对不需要考虑,您可以通过整数除法或日期组件轻松可靠地转换日期和日期组件,chacunàsongoût