Я загружаю даты из своего веб-сервиса, я отправляю даты в формате (время по Гринвичу): 02/11/11 10: 56: 09
Я создаю форму NSDate, используяNSDateFormatter как таковой:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss"];
NSDate *journeyDate = [dateFormatter dateFromString:str];
[dateFormatter release];
Это прекрасно работает после того, как я сравниваю это с текущей датой, чтобы получить относительные интервалы времени.
Проблема заключается в том, что телефон настроен наВ другом часовом поясе, когда я загружаю дату из моего API и использую средство форматирования даты, кажется, что происходит то, что телефон предполагает, что строка даты является местным временем, и преобразовывает ее в GMT.
Пример:
Я загружаю дату со временем 10 утра из API.Телефон настроен на ФДТ.Модуль форматирования даты создает NSDate, предполагая, что моя строка даты с 10 утра действительно имеет отношение к телефону.
Я получаю дату и время, равные 5 вечера, добавив 10 часов.
Я пытаюсь указать в моем устройстве форматирования даты, что строка является GMT, но у меня возникли проблемы, я пробовал следующее, добавляя GMT к формату:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss GMT"];
NSDate *journeyDate = [dateFormatter dateFromString:str];
[dateFormatter release];
Это не работает.
Кто-нибудь может дать какой-нибудь совет?
Решение
Просто резюме, я получил его, работая с ужасной работой вокругдобавив GMT к исходной строке и отформатировав ее так:
NSString * cheat = [NSString stringWithFormat:@"%@ GMT", str];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss zzzz"];
NSDate *journeyDate = [dateFormatter dateFromString:cheat];
[dateFormatter release];
return journeyDate;
Это был своего рода нестабильный хак, потому что если строка изменилась и включила часовой пояс, она больше не работала бы.Для тех, кому нужно действовать как я, ниже приведен лишь краткий пример создания NSTimeZone.
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
NSDate *journeyDate = [dateFormatter dateFromString:str];
[dateFormatter release];
return journeyDate;
Спасибо за быструю помощь.