2016-05-12 10 views
0

Ich versuche, die Zeit von einer Zeichenfolge, die wie @"2016-05-12T16:25:55.000Z" aussieht. Ich habe so etwas wie dies versucht:Parse Time von NSDate

NSDateFormatter *formatter = [NSDateFormatter new]; 
formatter.dateFormat  = @"HH:mm"; 
formatter.timeZone   = [NSTimeZone systemTimeZone]; 

NSDate *serverDate = [formatter dateFromString:dateString]; 
NSString* time = [formatter stringFromDate:serverDate]; 
NSLog(@"Time: %@", time); 

Aber mein serverDate kehrt null. Ich bin mir nicht sicher, was ich falsch mache.

Antwort

2

Wenn Sie eine NSDate aus einer NSString erstellen, muss das Datumsformat vollständig mit der gesamten Zeichenfolge übereinstimmen.

Aber es scheint, Ihr Ziel ist es, die Zeit als String zu bekommen. Holen Sie sich also den Teilstring:

NSString *time = [dateString substringWithRange:NSMakeRange(11, 5)]; 

Natürlich behandelt dies in keiner Weise die Zeitzone. Wenn Sie die ursprüngliche Zeichenfolge in eine NSDate analysieren und dann die Zeit ab diesem Datum mit allen erforderlichen Zeitzonenanpassungen abrufen möchten, benötigen Sie zwei Datumsformate. Eine, um die ursprüngliche Zeichenfolge in eine NSDate und die zweite (die Sie bereits haben) zu analysieren, um die neue Zeichenfolge mit der gewünschten Ausgabe (die Zeit in diesem Fall) zu generieren.

+0

Vielen Dank. Ihr kombinierter Ansatz hat sehr gut funktioniert. – BlackHatSamurai

0

Sie können die Eigenschaft dateFormat Ihres Formatierungsprogramms auf @"yyyy-MM-dd'T'HH:mm:ssZ" setzen und dann den Zeitwert mithilfe von NSDateComponents abrufen.

+0

Ihr Format stimmt nicht mit der Zeichenfolge in der Frage überein. – rmaddy

0

Zuerst konvertieren Ihr Datum zu NSDate

+ (NSDate *) convertDateToNSDateWithGivenFormat: (NSString *) dateStr Format:(NSString*) format 
{ 
    NSDateFormatter *dateFormatterDate = nil; 
    NSDate *dateonly = nil; 

    if (dateFormatterDate == nil) { 
     dateFormatterDate = [[NSDateFormatter alloc] init]; 
     [dateFormatterDate setDateFormat:format]; 
    } 
    dateonly = [dateFormatterDate dateFromString:[NSString stringWithFormat:@"%@", dateStr]]; 

    return dateonly; 
} 

dann die Variable NSDate verwenden Datum und Uhrzeit

+ (NSString *) GetFormattedTimeStringForGivenDate:(NSDate *) date 
{ 
    NSString *retStr = nil; 
    NSDate *now = date; 
    NSDateFormatter *dateFormatterDateOnly = nil; 
    NSDateFormatter *dateFormatterTimeOnly = nil; 

    if (dateFormatterDateOnly == nil) { 
     dateFormatterDateOnly = [[NSDateFormatter alloc] init]; 
     [dateFormatterDateOnly setDateFormat:@"MM/dd/yyyy"]; 
    } 
    if (dateFormatterTimeOnly == nil) { 
     dateFormatterTimeOnly = [[NSDateFormatter alloc] init]; 
     [dateFormatterTimeOnly setDateFormat:@"hh:mm:ss:a"]; 
    } 
    //if you need date use this 
    //retStr = [NSString stringWithFormat:@"%@", [dateFormatterDateOnly stringFromDate:now]]; 
    retStr = [NSString stringWithFormat:@"%@", [dateFormatterTimeOnly stringFromDate:now]]; 
    return retStr; 
} 

Hier Beispiel ist aufzuspalten. Sie können das Format nach Ihrem Bedarf ändern:

NSDate *myDt = [MyClass convertDateToNSDateWithGivenFormat: @"2016-05-12T16:25:55" Format:@"yyyy-MM-dd'T'HH:mm:ss"]; 
    NSString *str = [MyClass GetFormattedTimeForGivenDate:myDt];