2010-12-02 7 views
10

Dies könnte eine dumme Frage sein, aber ich kann nicht finden, die Antwort hier oder in der Dokumentation.Convert NSString eines Datums in ein NSDate

Ich möchte einen NSString wie @ "9/22/2010 3:45 PM" zu einem NSDate konvertieren.

Ich weiß NSDateFormatter zu verwenden, aber die Probleme sind

  1. Der Monat könnte eine oder zwei Ziffern
  2. Ebenso sein könnte das Datum eine oder zwei Ziffern seine
  3. Stunden ein oder zwei sein könnten Ziffern
  4. Was mache ich mit AM/PM?

Antwort

26
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"MM/dd/yyyy h:mm a"]; 
NSDate *date = [dateFormat dateFromString:dateStr]; 
[dateFormat release]; 

gibt es kein Problem in 2-stelliger Tag oder 2-stelligen Monat.

Dies muss Ihnen helfen.

+0

Das sollte funktionieren. Vergessen Sie nicht, "dateFormat" zu veröffentlichen. –

+0

Hm hat nicht funktioniert. Ich bin mir nicht sicher, wie es es bekommen wird. – Kevin

+0

Ich habe von diesem 11/20/2010 2:00 PM zu 2009-12-27 19:00:00 GMT. Was natürlich nicht das Gleiche ist. – Kevin

3

Sie können einen NSString in eine NSDate mit der NSDateFormatter Klasse analysieren. Siehe the documentation für weitere Informationen:

Instanzen NSDateFormatter Stringdarstellungen von NSDate erstellen (und NSCalendarDate) Objekten und konvertieren Textdarstellungen von Daten und Zeiten in NSDate Objekte.

2

Ich war das gleiche Problem, nicht sicher, warum NSDateFormatter nicht für mich arbeiten (iOS5 - Xcode 4.3.2), aber das war für mich aus:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; 
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]]; 
[dateFormatter setDateFormat:@"dd-MM-yyyy"]; 
NSString *dateString = @"05-06-2012"; 
NSDate *date; 
NSError *error = nil; 
if (![dateFormatter getObjectValue:&date forString:dateString range:nil error:&error]) { 
    NSLog(@"Date '%@' could not be parsed: %@", dateString, error); 
} 
[dateFormatter release];