2010-07-09 7 views
8

ich folgenden Code verwenden & seine völlig in Ordnung in iPhone OS 3,2für iPhone OS 4.0 "dateFromString" Methode des NSDateFormatter nil

+(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; 
} 

arbeitet Aber als ich versuchte, den gleichen Code I iPhone OS 4.0 die verwenden dateObj war null.

Der Grund dafür ist:

- (id)init Methode für NSDateFormatter ist nur in iPhone OS 2.0 über iPhone OS 3.2. Es ist in iPhone OS 4.0 veraltet.

Nun, was ist die Lösung dafür? Wie starte ich NSDateFormater? Was ist die Alternative?

+0

Wir können den NSString in NSDate konvertieren mit NSDateComponents wie: NSDateComponents * comps = [[NSDateComponents Alloc] init]; [comps setDay: 6]; [Komp. SetMonth: 5]; [comps setYear: 2004]; NSCalendar * gregorian = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar]; NSDate * Datum = [gregorian dateFromComponents: comps]; [comps release]; – Rambo

+3

Aber was nun mit NSDateFormatter zu tun? Können wir es nicht mit IPhone OS 4.0 verwenden? Wenn ja, wie? – Rambo

+1

nur weil es veraltet ist bedeutet nicht, dass es nicht funktioniert - es könnte nur in der Zukunft nicht funktionieren. Wenn du __NSLog (@ "% @", dateFormatter); __ nachdem du init angerufen hast, was bekommst du? Wenn Sie keine Null erhalten, hat diese Warnung nichts mit Ihrem Problem zu tun. – deanWombourne

Antwort

2

- (id)init ist nicht veraltet für NSDateFormatter in iOS4. Das ist ein Fehler in der Dokumentation.

+0

Ich dachte, das muss der Fall sein - ist das irgendwo in Apple-Entwicklerforen usw. dokumentiert? –

2

[NSDateFormatter dateFormatFromTemplate: Optionen: locale:] könnte

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

// "M/dh: mm eine" bessere Arbeit // US-Englisch-Format für die US-locale

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

In iOS2.x und 3.x die NSDate Beschreibung/datefromstring Funktion gibt zurück: 2010-09-24 17:30:00 - 0700

in iOS 4.1 gibt es das zurück: 2010- 09-25 00:30:00 GMT

Sie könnten einen Fehler an Apple senden. Es folgt nicht einmal der Spezifikation, die besagt, dass 0000 für den Offset zurückgegeben werden sollte. Es gibt also nicht nur lokales Datum zurück, es verwendet auch GMT anstelle eines Offset. Es scheint, dass dieses neue Format nicht mit NSDateFormatter-Methoden kompatibel ist.

Auch ich glaube nicht, dass es ein Fehler in der Dokumentation ist. Im API-Diff-Dokument wird aufgeführt, dass init für NSDateFormatter entfernt wurde.

+0

Noch verwirrender, die Ergebnisse variieren, wenn Sie Ihre Gerätekonfiguration von einer 24-Stunden-Uhr in eine 12-Stunden-Uhr ändern: S –

Verwandte Themen