Для iPhone OS 4.0 метод dateFromString NSDateFormatter возвращает ноль

Я использую следующий код, и он отлично работает в iPhone OS 3.2.

+(NSDate *)NSDateFromString:(NSString *)dateString
{

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

    [dateFormatter setDateStyle:NSDateFormatterShortStyle];
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle];
    [dateFormatter setDateFormat:@"yyyy-MM-dd"];
    NSDate *dateObj=[dateFormatter dateFromString:dateString];
    [dateFormatter release], dateFormatter=nil;
    return dateObj;
}

Но когда я попытался использовать тот же код, что и в iPhone OS 4.0, dateObj был равен нулю.

Причина:

- (id)init метод для NSDateFormatter доступен только в версиях от iPhone OS 2.0 до iPhone OS 3.2. Он устарел в iPhone OS 4.0.

Какое решение для этого есть? Как запустить NSDateFormater? Какая альтернатива?


person Nic    schedule 09.07.2010    source источник
comment
Мы можем преобразовать NSString в NSDate, используя NSDateComponents, например: NSDateComponents * comps = [[NSDateComponents alloc] init]; [comps setDay: 6]; [comps setMonth: 5]; [comps setYear: 2004]; NSCalendar * gregorian = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar]; NSDate * date = [gregorian dateFromComponents: comps]; [сборник релизов];   -  person Rambo    schedule 09.07.2010
comment
Но что теперь делать с NSDateFormatter? Разве мы не можем использовать его с IPhone OS 4.0? если да, то как?   -  person Rambo    schedule 09.07.2010
comment
просто потому, что он устарел, это не означает, что он не будет работать - он просто может не работать в будущем. Если вы NSLog (@% @, dateFormatter); после вызова init, что вы получите? Если вы не получили nil, это предупреждение не имеет ничего общего с вашей проблемой.   -  person deanWombourne    schedule 09.07.2010
comment
Вызов -setDateFormat: отменяет предыдущие -setDateStyle: и -setTimeStyle:. Эти два утверждения не нужны.   -  person kennytm    schedule 09.07.2010
comment
Это очень распространенная проблема, обратите внимание на предыдущие ответы, чтобы узнать, решит ли один из них вашу проблему.   -  person progrmr    schedule 09.07.2010
comment
У меня уже некоторое время возникают головные боли с NSNumberFormatter. всегда возвращайте nil, прежде чем он работал идеально.   -  person Hoang Pham    schedule 09.07.2010
comment
NSDate * dateObj = [dateFormatter dateFromString: dateString]; Что можно сделать, чтобы вместо nil получить правильный результат ???   -  person Rambo    schedule 10.07.2010


Ответы (3)


- (id)init не является устаревшим для NSDateFormatter в iOS4. Это ошибка в документации.

person Axel    schedule 11.07.2010
comment
Я думал, что это должно быть так - задокументировано ли это где-нибудь на форумах разработчиков Apple и т. Д.? - person Daniel Dickison; 17.08.2010

[NSDateFormatter dateFormatFromTemplate: options: locale:] может работать лучше

NSString *format = [NSDateFormatter
                   dateFormatFromTemplate:@"Mdjm"
                                  options:0
                                   locale:[NSLocale currentLocale]];

// "M / d h: mm a" // Формат американского английского языка возвращен для локали США

[dateFormatter setDateFormat:format];
NSDate *date = [dateFormatter dateFromString:dateString];
person Thom Mahoney    schedule 11.07.2010

В iOS2.x и 3.x функция NSDate description / datefromstring возвращает: 2010-09-24 17:30:00 - 0700

в iOS 4.1 он возвращает это: 2010-09-25 00:30:00 GMT

Вы можете сообщить об ошибке в Apple. Он даже не соответствует спецификации, в которой говорится, что он должен возвращать 0000 для смещения. Таким образом, он не только не возвращает местную дату, но также использует GMT вместо смещения. Похоже, что этот новый формат несовместим с методами NSDateFormatter.

Кроме того, я не думаю, что это ошибка в документации. В документе API Diff указано, что init удален для NSDateFormatter.

person MGC    schedule 15.10.2010
comment
Еще более озадачивает то, что результаты будут отличаться, если вы измените конфигурацию устройства с 24-часового на 12-часовой формат: S - person The WebMacheter; 14.01.2011