2016-07-10 4 views
2

Мне нужно сохранить временной интервал в базе данных приложения, который будет иногда добавляться до NSDate. Проблема в том, что я не знаю, какой тип данных выбрать для него. Некоторые люди советуют хранить NSTimeInterval, но будут ли они вызывать просчеты при изменении часового пояса пользователя? Может быть, лучше хранить NSDateComponents (как «преобразованный» тип данных), или есть другой лучший способ сделать это?Каков правильный способ хранения временного интервала в Core Data?

+0

Это зависит. Временной интервал 10 секунд, 20 минут или 3 часа составляет 10 секунд, 20 * 60 секунд или 3 * 3600 секунд, независимо от того, какой часовой пояс или текущая дата, и вы можете сохранить его как NSTimeInterval. - Временной интервал «1 день» может составлять 23, 24 или 25 часов. Временной интервал «1 месяц» может составлять 28, 29, 30 или 31 день (в григорианском календаре). –

+0

@MartinR Да, забыл упомянуть об этом. Интервалы в моем приложении могут быть либо через несколько минут, либо несколько месяцев. – Randex

ответ

6

минута 60 секунд, а час 3600 секунд, независимо от того, какая дата, часовой пояс или календарь - . Если вы хотите сохранить продолжительность «24 часа», вы можете сохранить ее как временной интервал со значением 24 * 3600.

Все крупные единицы измерения, начиная с , день, должны интерпретироваться в соответствии с текущей датой, часовым поясом и календарем. Продолжительность «один день» может быть 23, 24 или 25 часов в регионах с летним временем. В частности, «24 часа» и «1 день» имеют другое значение. Продолжительность «1 месяц» может составлять от 28 до 31 дня в григорианском календаре , а «1 год» может составлять 365 или 366 дней. Другие календари могут иметь другие «особенности».

Поэтому все длительности, включающие «день» или более крупные единицы, должны быть сохранены в качестве компонентов даты . Преобразование в NSDateComponents - это одна из возможностей, . В качестве альтернативы вы можете добавить несколько объектов «durationDays», «durationMonths» и т. Д. К объекту Core Data. Это имеет преимущество , что значения могут упоминаться в запросах выборки или сортировать дескрипторы .

+0

Благодарим за хорошее объяснение. Думаю, для этого я буду использовать несколько свойств. – Randex