Создать проблему с часовым поясом NSDate - PullRequest
0 голосов
/ 02 ноября 2011

Я загружаю даты из своего веб-сервиса, я отправляю даты в формате (время по Гринвичу): 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;

Спасибо за быструю помощь.

Ответы [ 2 ]

1 голос
/ 02 ноября 2011
1 голос
/ 02 ноября 2011

Я подозреваю, что вы просто хотите использовать NSDateFormatter.setTimeZone , чтобы заставить его использовать UTC. Вы не хотите изменять строку format , потому что, предположительно, строка не содержит букв «GMT» - вместо этого вы хотите изменить часовой пояс, в котором интерпретируется строка, а именно setTimeZone сделаю.

...