Преобразование NSString в NSDate. Проблема с "2011-08-24T14: 06: 10Z" - PullRequest
0 голосов
/ 31 августа 2011

Как преобразовать эту строку:

2011-08-24T14:06:10Z

для NSDate с использованием NSDateFormatter. Я не знаю, какой формат установить. Что это означает «T» и «Z»?

Ответы [ 2 ]

3 голосов
/ 31 августа 2011

Это формат даты RFC3339.

Вы можете разобрать его, используя:

NSDateFormatter* rfc3339DateFormatter = [[NSDateFormatter alloc] init];

[rfc3339DateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];

NSDate* date = [rfc3339DateFormatter dateFromString:yourString]; 

[aDateFormatter release];

Более подробная информация доступна в документации Даты форматирования Apple и вы также можете найти больше информации о формате даты RFC3339 (относительно T и Z) * ​​1008 * в этом разделе стандарта RFC3339

0 голосов
/ 24 марта 2015

Способ анализа дат RFC 3339 / ISO 8601 заключается в следующем:

NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ssZZZZZ";
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];

Или в macOS 10.12 и iOS 10:

NSISO8601DateFormatter *formatter = [[NSISO8601DateFormatter alloc] init];

Тогда:

NSDate* date = [formatter dateFromString:dateString]; 

Обратите внимание, что ZZZZZ указывает форматировщику использовать часовой пояс, представленный в строке (где GMT ​​+ 0 представляется как Z) при преобразовании строк в NSDate объекты.Аналогично, устанавливая dateFormat и timeZone, этот форматер также можно использовать для преобразования NSDate объектов обратно в строки, такие как 2011-08-24T14:06:10Z, выполняя необходимые преобразования часовых поясов.В итоге этот форматер работает в обоих направлениях.

Использование свойства locale также является наилучшей практикой, так как оно гарантирует, что дата будет правильно интерпретироваться независимо от конкретного календаря устройства (т. Е. Особенно если это не так.григорианский календарь).См. Технические вопросы и ответы 1480 .

...