Обновление
Начиная с iOS 7, NSDateFormatter действительно действительно создает NSDate, когда представлена строка в следующем формате:
NSDateFormatter *formatter = [NSDateFormatter new];
[formatter setDateFormat:@"@"yyyy'-'MM'-'dd'T'HH':'mm':'ssZ""];
NSLog(@"non–nil date, even honoring the 7–minute–offset in the time–zone on iOS 7: %@",
[formatter dateFromString:@"2011-07-12T18:07:31+02:07"]);
Для iOS 6 ответ не использовать NSDateFormatter…
Хорошо, до этого момента я прочитал
о том, как использовать NSDateFormatter
для создания NSDate
из строки.
Я также наткнулся на Питера Хоси ISO8601DateFormatter .
Заглядывая в его реализацию, мне интересно:
Разве не существует способа, который является правильным и вменяемым, чтобы получить строку, подобную этой 2011-07-12T18:07:31+02:00
, в NSDate
?
- Не было бы проблем, если бы отсутствовала последняя двоеточие.
- Не было бы проблем, если бы
GMT
имел префикс знака "+", но ...
- это не так.
Я могу взломать , чтобы это работало для моего приложения (используя формат @"yyyy'-'MM'-'dd'T'HH':'mm':'ssz':'00"
), но это - конечно - неверно , потому что это отбросит минутную информацию часовой пояс.
Я также мог бы заменить последнее двоеточие пустой строкой, но я бы тоже посчитал это взломом.
Итак, есть ли какой-нибудь секретный соус, чтобы заставить NSDateFormatter
взять эту строку сверху и дать мне правильный и правильный NSDate
?
За исключением:
Я где-то нашел подсказку, что можно использовать +[NSDate dateWithNaturalLanguageString:]
для достижения моей цели. Это - однако - только устанавливает дату, но не время! (Хорошо, что устанавливает время, но учитывает только смещение часового пояса, а не ЧЧ: мм: сс часть ...)