2011-07-26 8 views
3

Je suis en train de créer un NSDate à partir d'une chaîne retournée par l'API twitter Comme je l'ai passé des heures sur cette question que j'ai créé un exemple d'applicationutilisation NSDateFormatter pour analyser les chaînes Twitter

NSString *testDate = @"Mon Jul 25 21:20:58 +0000 2011"; 
NSDateFormatter *frm = [[NSDateFormatter alloc] init]; 
[frm setDateStyle:NSDateFormatterLongStyle]; 
[frm setFormatterBehavior:NSDateFormatterBehavior10_4]; 
[frm setDateFormat: @"EEE MMM dd HH:mm:ss 'Z' yyyy"]; 
NSDate *newDate = [frm dateFromString:testDate]; 
NSLog(@"newDate:%@", newDate); 

Pour moi, ce code ' devrait marcher.

tout ce que je suis arrivé est ceci:

2011-07-25 19:36:08.467 test[92:707] Test 
2011-07-25 19:36:08.475 test[92:707] newDate:(null) 

I found this but it's not working either.

Je Lion + Xcode 4.1 Mon iPad est sous 4.3.5

Merci à l'avance pour toute aide;)

Répondre

5

Ne pas vous lancer trop dur ...

Dans votre chaîne de format, supprimer les apostrophes d'environ Z. Les apostrophes signifient que ça va être un Z littéral, pas le fuseau horaire. Si vous les supprimez, cela fonctionnera correctement.

3

Voici ce qui a fonctionné pour moi

pas entre guillemets Z comme l'a dit Dave DeLong. J'ai utilisé setLocale sur le NSDateFormatter, cela a amélioré le fonctionnement.

NSDateFormatter *frm = [[NSDateFormatter alloc] init]; 
[frm setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]]; 
[frm setDateFormat:@"EEE MMM dd HH:mm:ss Z yyyy"]; 
+0

Sans définir l'identificateur de paramètres régionaux @ "en_US_POSIX", l'extrait de code n'a fonctionné que sur le simulateur. Maintenant, cela fonctionne aussi sur l'appareil. Merci!!! – Sendoa

1

Pour toute personne qui trouve cela via Google, Twitter a apparemment changé leurs formats de date, au moins pour leur point de terminaison http://search.twitter.com/search.json.

NSDate __attribute__((pure)) *parseTwitterDate(NSString *twitterDate) { 
    NSDateFormatter *twitterDateFormatter = NSDateFormatter.new; 
    [twitterDateFormatter setDateFormat: @"EEE, dd MMM yyyy HH:mm:ss Z"]; 
    return [twitterDateFormatter dateFromString:twitterDate]; 
}; 
+1

Endpoint de recherche Twitter avait depuis le début un format de date différent et j'utilise la même solution que la vôtre. Merci pour le crochet, j'aurais dû être plus précis avec la question. –

+1

Intéressant. C'est la marque d'une API mal conçue, qu'ils ne peuvent même pas utiliser un format de date cohérent (si obscur) tout au long de leur API. Ils devraient simplement utiliser ISO8601. – wjl

+1

https://xkcd.com/1179/ –

Questions connexes