2010-09-27 8 views
2

Je veux convertir la date suivante: 2010-02-01T13: 58: 58.513ZNSString aux résultats NSDate à NULL

qui est stocké dans un NSString à et NSDate.

qui suit cependant tout indique "NULL" dans le débogueur

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

[formatter setDateFormat:@"YYYY-MM-DDTHH:MM:SS.tttZ"]; 

NSLog(@"Output: %@", [formatter dateFromString:@"2010-02-01T13:58:58.513Z"]); 

[formatter release]; 

Idées?

Répondre

1

Vous devez échapper à la "T" dans la chaîne de format avec des guillemets simples.

[formatter setDateFormat:@"YYYY-MM-DD'T'HH:MM:SS.tttZ"]; 

-

Edit: vos formatteurs ne sont pas tout à fait correct non plus. ttt par exemple n'est pas un formateur valide selon la documentation. Official documentation

Si je fais cela, je peux le faire fonctionner, mais cela ne résout pas le problème Z:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"YYYY-MM-DD'T'HH:mm:ss.SSS"]; 
NSLog(@"Output: %@", [formatter dateFromString:@"2010-02-01T13:58:58.513"]); 
[formatter release]; 

-

Edit 2: Bingo, trouvé le bon formatter .

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

Que diriez-vous de la Z? C'est toujours nul avec ça. –

+0

En travaillant dessus, un instant, le Z n'est pas le seul problème. –

+0

Eh bien cela affiche autre chose que null. Mais cela me donne une mauvaise date: 2010-01-01. –

0

Meilleur résultat: Votre format de date contient un espace. Essayez ceci:

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

[formatter setDateFormat:@"YYYY-MM-DD'T'HH:mm:SS.SSS'Z'"]; 

NSDate *date = [formatter dateFromString:@"2010-02-01T13:58:58.513Z"]; 

NSLog(@"Output: %@", [date description]); 

[formatter release]; 
+0

Cela imprime aussi null. –

+0

Désolé. Essayez ma solution, il imprime pour moi. –

+0

Il imprime quelque chose, mais la mauvaise date. Prints 2010-01-01 –

0

Il y a plusieurs problèmes dans votre format:

  • MM est pour le mois en mm est pour les minutes
  • SS n'existe pas, l'utilisation ss au lieu
  • même pour ttt , utilisez AAA
  • il y a de l'espace entre votre chaîne de format qui ressemble à une faute de frappe mais qui causera une erreur

quel fuseau horaire ne stand de code Z pour à la fin de votre temps (2010-02-01T13: 58: 58.513Z)

essayer

[formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss.AAA'Z'"]; 

Cela va créer une heure GMT, car il reconnaît le Z a mangé la fin une lettre aussi simple et pas comme fuseau horaire.

Modifier: [formatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ss.SSS'Z'"]

+0

Toujours me donne: "Sortie: (null)". –

+0

AAA est pour les millisecondes dans la journée, alors que SSS est pour les secondes fractionnelles, ce que je pense est ce qu'il veut dire. –