2009-12-30 6 views
1

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

В принципе, у меня есть строка даты @ "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

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

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

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

Редактировать

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

ответ

5

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

Я заметил, что есть setTimeZone: method на NSDateFormatter. Попробуйте вызвать это в своем форматировании перед выполнением формата.

+0

Ах, интересно! Я не понимал временные зоны «NSDateFormatter». Похоже, что он автоматически устанавливает его из системы по умолчанию. И это создает разные временные метки unix в зависимости от зоны! Спасибо за это! –

+0

Я не подтвердил это, но я думаю, что вы найдете то же самое, что и в отношении синтаксического анализа даты. Когда вы разбираете строку даты, она будет считать, что строка находится в вашем системном часовом поясе, если вы не настроите парсер по-разному. Приветствия :) –

Смежные вопросы