Хорошее практическое правило программирования - всегда хранить даты в UTC. Неважно, используете ли вы Core Data или нет; вам все равно придется проделать некоторую работу, потому что классы свиданий Apple в значительной степени отстой.
Даты представляются внутри в виде количества секунд с контрольной даты, которая, я полагаю, 1 января 2001 года 00:00:00 (хотя фактическая контрольная дата не очень важна). Дело в том, что NSDate
объекты всегда изначально в UTC. Если даты, которые вы получаете в своем CSV-файле, являются локальными, вам нужно сделать что-то вроде этого, чтобы получить время UTC:
NSDate *UTCDate = [localDate addTimeInterval:-[[NSTimeZone localTimeZone] secondsFromGMT]];
Тогда я бы установил время на 00:00:00. Теперь вы сохраняете дату в полночь в UTC. Для целей презентации вы будете использовать NSDateFormatter
, настроенный с выбранным вами часовым поясом (системный часовой пояс используется по умолчанию, если вы его не указали) для отображения этих дат.
Часовые пояса не имеют большого значения, когда вы имеете дело только с датами. Пока вы устанавливаете часовой пояс на NSDateFormatter
на UTC, вы всегда будете показывать одну и ту же дату, независимо от того, какой часовой пояс выбрал пользователь на своем устройстве.
Если вам не нравится это решение, вы всегда можете сохранить свои даты в альтернативном формате. Вы можете использовать double
или int
для хранения даты в каком-либо пользовательском формате (например, количество дней с некоторой контрольной даты), или вы даже можете свернуть свой собственный класс, чтобы смоделировать дату точно так, как вы хотите, и сохранить это как NSData
объект. Пока класс реализует NSCoding
, вы можете сериализовать его в объект NSData
в Core Data. Вам просто нужно установить тип атрибута в Базовых данных на «Трансформируемый».
У вас есть множество вариантов, и ни один из них не требует написания ваших собственных запросов и баз данных SQLite.