2010-07-09 3 views
8

Я использую следующий код & его прекрасно работает отлично в iPhone OS 3.2для iPhone OS 4.0 «dateFromString» метод NSDateFormatter возвращает ноль

+(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? Какая альтернатива?

+0

Мы можем преобразовать 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]; [comps release]; – Rambo

+3

Но, что теперь делать с NSDateFormatter? Не можем ли мы использовать его с IPhone OS 4.0? если да, то как? – Rambo

+1

просто устареет, это устарело, это не значит, что он не сработает - он просто не может работать в будущем. Если вы __NSLog (@ "% @", dateFormatter); __ после того, как вы вызвали init, что вы получаете? Если вы не получите ничто, это предупреждение не имеет ничего общего с вашей проблемой. – deanWombourne

ответ

2

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

+0

Я думал, что это должно быть так - это документировано где-нибудь на форумах разработчиков Apple и т. Д.? –

2

[NSDateFormatter dateFormatFromTemplate: опции: Язык:] может работать лучше

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

// "M/DH: мм в" // США английский формат возвращаемый для США локали

[dateFormatter setDateFormat:format]; 
NSDate *date = [dateFormatter dateFromString:dateString]; 
2

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

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

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

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

+0

Еще более затруднительные результаты могут измениться, если вы измените конфигурацию своего устройства с 24-часовой до 12-часовой: S –

Смежные вопросы