Обработка часовых поясов в Какао

Я просто хочу уточнить, понимаю ли я, как работают даты и часовые пояса.

В принципе, у меня есть строка даты @ "2008-07-06 12:08:49", которую я хочу преобразовать в NSDate. Я хочу, чтобы эта дата и время находились в любом часовом поясе текущего пользователя. Поэтому, если они находятся в GMT или HST, это все равно 12:08:49.

Если у меня есть дата в формате unix 1215382129 (UTC), а мой часовой пояс установлен на Лондон (GMT), выводимая дата из NSLog () будет:

2008-07-06 12:08:49 +0100

Если я затем изменю свой часовой пояс на Гавайи (HST) и выведу ту же дату, я получу:

2008-07-06 12:08:49 -1000

Кажется, это работает нормально, но у меня создалось впечатление, что для получения времени на гавайском языке мне пришлось бы физически добавить разницу во времени (-10 часов) к отметке времени unix. Значит, это не требуется?

Означает ли это, что независимо от даты и времени, на которые указывает время unix, оно всегда указывает на одну и ту же дату и время в любом часовом поясе, в котором находится пользователь?

Надеюсь, это имеет смысл!

Изменить

Я только что понял (спасибо Кевину Коннеру!), Что на самом деле NSDateFormatter создает разные временные метки unix для этой строки даты в зависимости от текущего часового пояса! Так что я был совершенно неправ !! :-)


person Michael Waterfall    schedule 30.12.2009    source источник


Ответы (1)


Отказ от ответственности, я в основном парень Java. Но в этом отношении Какао, похоже, работает как библиотека Java: даты - это беззонные временные метки. Часовые пояса находятся в области форматирования дат для отображения. Другими словами, внутренний формат не учитывает часовые пояса, все в UTC. Часовые пояса относительно удобны для людей, поэтому они находятся на стороне отображения / анализа.

Я заметил, что есть _ 1_ метод на NSDateFormatter. Попытайтесь вызвать это на вашем модуле форматирования, прежде чем выполнять форматирование.

person Kevin Conner    schedule 30.12.2009
comment
Ах, интересно! Я не осознавал NSDateFormatter используемые часовые пояса. Казалось бы, он автоматически устанавливает его из системного значения по умолчанию. И это создает разные временные метки unix в зависимости от зоны! Спасибо за это! - person Michael Waterfall; 30.12.2009
comment
Я не подтверждал это, но я думаю, вы обнаружите, что то же самое можно сказать и о синтаксическом анализе даты: когда вы анализируете строку даты, он будет предполагать, что строка находится в часовом поясе вашей системы, если вы не настроите синтаксический анализатор по-другому. Ваше здоровье :) - person Kevin Conner; 30.12.2009