在 Core Data 中存储时间间隔的正确方法是什么?

What's the correct way to store a time interval in Core Data?

我需要在应用程序的数据库中存储一个时间间隔,该时间间隔会偶尔添加到 NSDate。问题是,我不知道为它选择什么数据类型。有人建议存储NSTimeInterval,但是当用户的时区改变时会导致计算错误吗?也许最好存储 NSDateComponents(作为 "Transformable" 数据类型)或者是否有其他更好的方法?

一分钟是60秒,一小时是3600秒,不管怎样 当前日期、时区或日历。如果要存储持续时间“24 小时”,则可以将其存储为值为 24*3600 的时间间隔。

所有更大的单位,从天开始,必须根据 当前日期、时区和日历。持续时间 "one day" 可以是 在实行夏令时的地区为 23、24 或 25 小时。 特别是,“24 小时”和“1 天”具有不同的含义。 持续时间“1 个月”在公历中可以是 28 到 31 天 日历,“1 年”可以是 365 天或 366 天。其他日历可能有 其他 "peculiarities".

因此必须存储涉及 "day" 或更大单位的所有持续时间 作为日期组件。转换为 NSDateComponents 是一种可能, 或者,您可以添加多个属性 "durationDays", "durationMonths",等等到您的核心数据实体。这有好处 可以在获取请求或排序中引用这些值 描述符。