2010-01-04 8 views
10

Existe-t-il un moyen facile de convertir l'horodatage que vous obtenez de twitter en unix temps ou minutes depuis maintenant? Je pourrais analyser la chaîne et tout convertir moi-même mais j'espère qu'il y a un moyen de convertir qui n'a pas besoin de ça. Voici un exemple d'élément created_at avec un horodatage.iPhone + API Twitter: Convertir le temps?

Sun Mar 18 06:42:26 +0000 2007

Répondre

22

Vous pouvez utiliser NSDateFormatter avec quelque chose comme ceci:


NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 
[dateFormatter setLocale:usLocale]; 
[usLocale release]; 
[dateFormatter setDateStyle:NSDateFormatterLongStyle]; 
[dateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4]; 

// see http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns 
[dateFormatter setDateFormat: @"EEE MMM dd HH:mm:ss Z yyyy"]; 

NSDate *date = [dateFormatter dateFromString:[currentDict objectForKey:@"created_at"]]; 
[dateFormatter release]; 

NSTimeInterval seconds = [date timeIntervalSince1970]; 
+0

Merci, fonctionne parfaitement! – self

+2

C'est également en partie faux aussi! La création d'un objet NSDateFormatter est assez lourde, alors faites-en une statique, ou faites-en autant que possible. –

0

fichier une demande de fonctionnalité avec Apple et leur faire savoir que vous voulez que cette fonctionnalité sur l'iPhone. NSDateFormatter fournit une méthode d'initialisation héritée qui prend un drapeau booléen indiquant que vous voulez analyser le langage naturel, mais il n'est disponible que sur OS X. Il y a quelque temps, Wil Shipley a écrit un interesting post sur cette fonctionnalité dans le contexte de l'heuristique et des facteurs humains.

Il ne semble pas probable que Apple fournira cette fonctionnalité que cette note indiquerait de la NSDateFormatter docs:

iPhone OS Remarque: iPhone OS prend en charge seulement le comportement 10.4+. 10.0-style méthodes et les chaînes de format ne sont pas disponible sur iPhone OS.

En d'autres termes, je pense que vous devrez l'analyser vous-même.

0

On dirait que vous avez besoin de quelque chose comme: ISO 8601 parser and unparser.

+0

Le format de l'exemple fourni dans la question n'est pas ISO 8601. –

2

Je suis strugeling avec toute la journée, mais ce fil m'a aidé à trouver une solution.

Voici comment je convertis l'attribut Twitter "created_at" en un NSDATE;

NSDateFormatter *fromTwitter = [[NSDateFormatter alloc] init]; 
// here we set the DateFormat - note the quotes around +0000 
[fromTwitter setDateFormat:@"EEE MMM dd HH:mm:ss '+0000' yyyy"]; 
// We need to set the locale to english - since the day- and month-names are in english 
[fromTwitter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en-US"]]; 

NSString *dateString = [item objectForKey:@"created_at"]; 
NSDate *tweetedDate = [fromTwitter dateFromString:dateString]; 

J'espère que quelqu'un trouvera ceci utile.

+0

ZOMG merci ça marche! Trouvé 5 autres formats qui n'ont pas fonctionné. La clé semble être le lieu que tout le monde semble avoir manqué. –