Получение неправильной даты с INITWITHTEMITHINVERVAL: SINCEDATE:

StackOverflow https://stackoverflow.com/questions/3550274

Вопрос

У меня свидание, 2010-08-23 13:30:00 -0400 И я пытаюсь получить его в часовом поясе UTC +2. Разница в секундах составляет 21600, но когда я звоню [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate];, Я получил 2010-08-24 01:30:00 +0200 который должен быть 2010-08-23 19:30:00 +0200. Отказ Любая идея, что я делаю не так?

Это было полезно?

Решение

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

Временные зоны участвуют, когда вы хотите отобразить дату, поскольку вы обычно отображаете то, что сказал бы часы пользователя (или говорится или скажут) в то время. Это именно то, что происходит, когда вы NSLog NSDate: описание даты - это момент времени, представленного в вашем местном часовом поясе.

Добавление или вычитание из NSDate не является преобразованием часового пояса. Дополнение и вычитание производят NSDates, представляющие разное моменты вовремя; В вашем случае вы создаете NSDate на мгновение на 6 часов спустя с момента, когда вы начали, нет в тот же момент на другой стороне планеты.

Упростить, преобразование часового пояса смотрит на в то же время в Разные точки в космосе (Различные разделы поверхности планеты), тогда как добавление даты и вычитания вычисление разных времен.

Нет преобразования часового пояса для NSDate, потому что это не в течение часового пояса, чтобы начать. Часовой пояс становится только вовлеченным только при форматировании даты на этот часовой пояс. Итак, чтобы отобразить эту дату в какой-то другой часовой поясе, просто сделайте это. Как правило, это означает, что обеспечивает желаемый часовой пояс к вашему Дата форматирования.

Другие советы

Я вижу, что дата, которую вы вернетесь, имеет другой часовой пояс +200 нет -400. Отказ Если вы заметите, что вы увидите, что этот результат ровно 12 часов (или 6 часов + 6 часов) позже, чем ваша оригинальная дата. Вы случайно меняете локаль, а также, когда вы сделали новую дату? Когда вы сделали изменение, которое начало давать вам +200 вместо -400 Система автоматически отрегулировала время компенсации, затем вы добавили еще 6 часов до даты. NSDate хранит все даты в качестве временного интервала с 1 января 2001 года GMT и настраивается на часовые появления по мере необходимости.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top