2012-04-13 14 views
0

Ich habe eine Zeichenfolge in UTC, die ich in NSDate konvertieren möchte. Irgendwie Im immer 30 Minuten FehlerNSDateFormatter Bug: falsche String-to-Date-Konvertierung

Der String ist 2012-04-10T00: 00: 00 + 05: 30

das umgewandelte Datum ist 2012-04-09 19.00.00 + 0000

wo, wie es gewesen sein sollte 2012-04-09 18:30:00 +0000

Im mit dieser Funktion Zeichenfolge Datum konvertieren

- (NSDate *)parseRFC3339Date{ 
    NSDateFormatter *rfc3339TimestampFormatterWithTimeZone = [[NSDateFormatter alloc] init]; 
    [rfc3339TimestampFormatterWithTimeZone setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"]; 

    NSDate *theDate = nil; 
    NSError *error = nil; 
    if (![rfc3339TimestampFormatterWithTimeZone getObjectValue:&theDate forString:self range:nil error:&error]) { 
     NSLog(@"Date '%@' could not be parsed: %@", self, error); 
    } 

    [rfc3339TimestampFormatterWithTimeZone release]; 
    return theDate; 
} 

Antwort

2

Wenn Sie eine NSRange für den gesamten String erstellen waren und gab seine Adresse in zu -getObjectValue:forString:range:error:, dann würden Sie, dass am Ausgang sehen es kurz sein würde. Das Parsen wurde am Doppelpunkt gestoppt, weil das 'Z' in der Formatzeichenfolge nur mit "-0800" (kein Doppelpunkt) übereinstimmt. Wenn Sie 4 Zs, 'ZZZZ' angeben würden, würde es mit "GMT-08: 00" übereinstimmen. Das erlaubt einen Doppelpunkt, erfordert aber "GMT". Sie können versuchen, die "GMT" einzufügen, wenn Sie sich des Datumsformats sicher sind.