Инкапсулируют ли NSDate в CoreData часовой пояс?

Я храню даты и время в своем хранилище CoreData, и мне нужно точно представлять пользователям время, которое было введено изначально. Проблема в том, что если они ввели 4:00 на Восточном побережье, то позже посмотрите на записанное время на Западном побережье, оно отображается как 1:00, так как iPhone переводит универсальное время в местное. Мне нужно, чтобы он показывал 4:00 -- возможно, 4:00 (+3:00).

Прежде чем приступить к реструктуризации моей модели Core Data, я хочу убедиться, что нет никакого способа получить NSTimeZone, который был активен во время создания, из сохраненного объекта NSDate. Есть? Если нет, какие рекомендации, как лучше всего захватить NSTimeZone во время создания? NSNumber, представляющий разницу во времени NSTimeZone во время создания с GMT?

Спасибо.


person ed94133    schedule 18.01.2011    source источник
comment
Отличный вопрос! Это классическая путаница. Короткий ответ - нет.'   -  person Nick Moore    schedule 18.01.2011


Ответы (1)


Как вы уже обнаружили, NSDate представляет универсальный момент времени и не включает информацию о конкретном часовом поясе.

Я бы предложил вместо сохранения смещения сохранить свойство NSTimeZone name. Затем вы можете использовать +[NSTimeZone timeZoneWithName:], чтобы получить часовой пояс и оттуда преобразовать его в местное время. Это дает вам максимальную гибкость в том, как вы отображаете информацию для пользователя.

person grahamparks    schedule 18.01.2011
comment
+1 за то, что не пытался возиться с NSDate! Хранение информации о часовом поясе отдельно — это, безусловно, правильный путь. - person Nick Moore; 18.01.2011
comment
В большинстве случаев вы также можете сохранить дату в формате GMT ​​и выполнять преобразования в местный часовой пояс пользователя, когда вам нужно отобразить информацию. - person Chris Wagner; 18.01.2011
comment
Спасибо! Это кажется хорошим подходом, за исключением того, что я не думаю, что свойство name фиксирует смещения летнего времени. Вероятно, это реальный пограничный случай, но разве я не мог бы использовать название европейского часового пояса в качестве основы для преобразования в американский и получить неправильное преобразование, потому что смещение часового пояса было ненормальным в течение той недели или двух? несинхронизированное летнее время? Может быть, все-таки лучше зафиксировать смещение от GMT во время входа? Я полагаю, я мог бы также сохранить название или аббревиатуру часового пояса только для информации о пользователе. - person ed94133; 19.01.2011
comment
@ ed94133 Он должен обрабатывать все эти вещи автоматически. - person grahamparks; 19.01.2011