Получение неправильной даты с INITWITHTEMITHINVERVAL: SINCEDATE:
-
30-09-2019 - |
Вопрос
У меня свидание, 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 и настраивается на часовые появления по мере необходимости.