2012-04-05 16 views
0

Ich möchte ein NSDate-Objekt aus einer Zeichenfolge von Datum abrufen, aber es gibt Nil zurück. Was mache ich falsch? Vielen Dank!NSDate von NSString - dateFromString gibt null zurück

NSString *dateString = @"2012-04-05T13:27:32.369Z"; 

NSDateFormatter* df = [[NSDateFormatter alloc]init]; 
[df setDateFormat:@"YYYY-MM-dd'T'HH:mm:ss.SSSZ"]; 
NSDate* date = [df dateFromString:dateString]; 
NSLog(@"1%@",date); 
[df release]; 
+2

Setzen Sie das Z in einfache Anführungszeichen. –

+1

Ich stimme Aadhira zu. – Nilesh

Antwort

1

Es yyyy jahrelang sein sollte

[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"]; 
+0

"JJJJ-MM-TT'T'HH: mm: ss.SSSZ" gibt immer noch null zurück. – zaph

4

Die "Z" muss angegeben werden:

NSDateFormatter* df = [[NSDateFormatter alloc]init]; 
NSString *dateString = @"2012-04-05T13:27:32.369Z"; 
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"]; 
NSDate* date = [df dateFromString:dateString]; 
NSLog(@"1: %@",date); 

NSString *newDateString = [df stringFromDate:date]; 
NSLog(@"2: %@",newDateString); 

NSLog Ausgabe:

1: 2012-04- 05 17:27:32 +0000
2: 2012-04-05T13: 27: 32,369

Beachten Sie, dass NSLog das NSDate Standard-Formatierungsprogramm mit der aktuellen Zeitzone verwendet.

See: Date_Field_Symbol_Table

0

Verwenden NSDateFormatter ein NSDate dann zu bekommen verwenden - (NSTimeInterval) timeIntervalSince1970 die Sekunden zu erhalten, da 1970.

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]]; 
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"]; 
NSDate *date = [formatter dateFromString:@"2012-04-05T13:27:32.369Z"]; 
NSLog(@"Date: %@", date); 
NSLog(@"1970: %f", [date timeIntervalSince1970]); 
NSLog(@"sDate: %@", [formatter stringFromDate:date]); 
[formatter release]; 

Hoffe, es hilft.