2010-09-01 20 views
4

Dans mon projet je reçois "2008-02-01T10: 03: 23.793-06: 00" ce format de date dans la chaîne je dois convertir en NSDate j'utiliseFormat de la date pour 2008-02-01T10: 03: 23.793-06: 00

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 

[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"]; 

NSDate* dateFromString = [dateFormatter dateFromString:@"2008-02-01T10:03:23.793-06:00"]; 

Mais quand je suis la valeur de la date d'impression en utilisant NSLog je reçois la valeur nulle.

S'il vous plaît, aidez-moi

Merci Vous

+0

Qu'est-ce que langue et plateforme utilisez-vous? –

+0

La langue est Objective-C, et je suppose que l'utilisateur utilise Xcode Apples propre. –

Répondre

-3

NSDateFormatter ne sera pas en mesure d'analyser, parce que le fuseau horaire ne se conforme pas RFC 822 or GMT standard. Le problème est sur le dernier ":" pour l'avoir vous avez besoin du "GMT".

La date que vous avez respecte le RFC 3339.

Vous devrez utiliser un NSFormatter pour l'analyser. Vous devez utiliser getObjectValue:forString:errorDescription:

Définissez la chaîne @"yyyy-MM-dd'T'HH:mm:ss.SSSZ".

1

Je pense que vous devez également définir une locale pour le formateur. Jetez un oeil here

6
NSDateFormatter* formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"]; 
[formatter setLenient:YES]; 
NSString* buggeredTime = [[sourceDate substringToIndex:26] stringByAppendingString:[sourceDate substringFromIndex:27]]; 
NSDate* dueDate = [formatter dateFromString:buggeredTime]; 
[formatter setDateFormat:@"'Time Due: 'hh:mm a MM/dd/yy"]; 
NSString* dateString = [formatter stringFromDate:dueDate]; 
[formatter release]; 

(J'sais désinvoltes si le setLenient est nécessaire.)

+1

Notez que la nécessité de faire la chose de sous-chaîne a été éliminée dans les versions ultérieures. Vous pouvez maintenant spécifier "ZZZZZ" pour accepter un fuseau horaire sous la forme "-06: 00". –

2

utiliser juste que la place (notez le "ZZZ" au lieu de "Z"):

[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"]; 
+0

Cela a parfaitement fonctionné pour moi sur une date telle que: 2015-02-15T17: 21: 54.000-06: 00 –