преобразовать строку в объект NSDate

Я получаю строку "2011-09-24T00:30:00.000-07:00" от веб-сервиса. Я не знаю, что это за формат, и хочу преобразовать объект даты в target-c.

Итак, любой знает, как преобразовать эту строку в дату.

Большое Вам спасибо


person Crazy Developer    schedule 24.09.2011    source источник
comment


Ответы (2)


Существует небольшая проблема с получением даты/времени из этого формата, ':' в часовом поясе, которую необходимо удалить, Apple не обрабатывает этот случай, и это не правильный формат UTS. Вот пример:

NSString *dateString = @"2011-09-24T00:30:00.000-07:00";
dateString = [dateString stringByReplacingOccurrencesOfString:@":" withString:@"" options:0 range:NSMakeRange(dateString.length-3, 1)];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"];
NSDate *date = [formatter dateFromString:dateString];
NSLog(@"date: %@", date);

Выход NSLog: date: 2011-09-24 07:30:00 +0000

В качестве теста, отображающего только что созданную дату:

NSString *testDateString = [formatter stringFromDate:date];
NSLog(@"date: %@", testDateString);

Выход NSLog: date: 2011-09-24T03:30:00.100-0400

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

person zaph    schedule 24.09.2011
comment
Привет, спасибо за ответ. Этот код помогает мне создать объект даты, но проблема в том, что он показывает мне неправильное время, потому что мой часовой пояс может отличаться, можете ли вы создать время экскавации, как в строке, которую я дал. Если да, то можете ли вы сказать, как это сделать... - person Crazy Developer; 28.09.2011

Строковый формат, обычно используемый веб-службами для представления даты/времени, — RFC 3339.

Его нельзя тривиально преобразовать в NSDate и из него, поскольку он может включать в себя различную информацию, которую нельзя представить только с помощью NSDate (например, смещение времени от UTC и дату без указания времени).

Существуют классы, которые сопоставляют строки RFC 3339 с собственными типами Cocoa, например это. Возможно, вы сможете обойтись более простым преобразованием, которое использует ярлыки, но для надежного кода используйте класс, написанный специально для обработки представления.

person grobbins    schedule 24.09.2011