如何存储任意时间

Posted

技术标签:

【中文标题】如何存储任意时间【英文标题】:How to store arbitrary times 【发布时间】:2015-01-30 20:27:11 【问题描述】:

我正在尝试存储没有与它们相关联的任何日期(最好没有时区)信息的时间。例如,员工可能在周一至周五上午 9 点至晚上 11 点有空。您不会将其存储为代表任何(许多)未来周一至周五的每个日期,而是将其存储为您将添加到当前星期日期的任意时间。

我还希望能够将这些时间存储为核心数据托管对象的属性。

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

【问题讨论】:

虽然不是重复的,但您可能会发现这个类似的问题很有用:***.com/questions/27631882/… 您需要在NSPredicate 中使用此信息吗?如果没有,只要您将属性类型设为transformableNSDateComponents 就可以正常工作。如果确实需要在谓词中使用信息,transformable 可能不是一个好主意。 我将需要使用 NSPredicate 中的信息。 我喜欢这两个答案,但最终将时间存储为 Ints 并仅在必要时将其转换为日期似乎最有效。 【参考方案1】:

你可以做一些简单的事情,比如创建一个具有 3 个属性的实体:

    星期几 一天中的小时 分钟

(如果需要,扩展到开始和结束小时和分钟)

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

【讨论】:

【参考方案2】:

日期组件是最自然的解决方案,原因您显然已经知道:我们所说的本质上是日期的部分组件。但是,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 之类的内容,并通过上述转换从每个存储和检索。或酌情组合更多组件。

【讨论】:

【参考方案3】:

我在一个 Core Data 驱动的应用程序中遇到了类似的情况,我发现简单地存储自午夜以来的分钟数是最实用的,因此最多为 1440。(如果您需要秒数,显然乘以 60,或者如果您需要几分之一秒,请使用浮点数。)

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

这是一个非常简单实用的解决方案,绝对是不费吹灰之力,您可以通过整数除法或使用日期组件轻松可靠地转换日期和日期,chacun à son goût

【讨论】:

以上是关于如何存储任意时间的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AWS Glue 运行任意/DDL SQL 语句或存储过程

如何匹配一个字符串,中间有任意词,并将其存储为变量?

如何使用 Rhino Mocks 模拟任意行为?

如何在 HTML 脚本标签中插入任意 JSON

使用 boost::spirit 解析任意精度整数

存储任意排序顺序的最有效方法?