46 votes

Existe-t-il un moyen simple de convertir un horodatage ISO8601 en un NSDate formaté?

Si j'utilise le code suivant:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];   
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm"];
NSDate *myDate = [dateFormatter dateFromString:@"2010-01-28T15:22:23.863"];
NSLog(@"%@", [dateFormatter stringFromDate:myDate]);

Il est converti en Date objet, cependant, je n'arrive pas à le formater de toute autre manière qu' yyyy-MM-dd'T'HH:mm, c'est à dire ce qui est connecté est - 2010-01-28T15:22:23

Si je change le dateFormat-à-dire [dateFormatter setDateFormat:@"yyyy-MMMM-d'T'HH:mm"]; l'objet Date est nul...

Donc ma question ultime est de savoir comment un format ISO8601 timestamp à partir d'une base de données SQL à utiliser, par exemple, NSDateFormatterMediumStyle de retour "1er janvier 2010"?

42voto

Matthew Points 684

J'ai un problème similaire mais légèrement plus complexe et j'ai trouvé une solution très simple!

Le problème: mes dates ISO8601 entrantes ressemblent à ceci: 2006-06-14T11:06:00+02:00 Ils ont un décalage horaire à la fin.

La solution: utilisez ISO8601DateFormatter de Peter Hosey que vous pouvez télécharger ici .

 ISO8601DateFormatter *formatter = [[ISO8601DateFormatter alloc] init];
NSDate *theDate = [formatter dateFromString:dateString];
[formatter release], formatter = nil;
 

et

 ISO8601DateFormatter *formatter = [[ISO8601DateFormatter alloc] init];
NSString *dateString = [formatter stringFromDate:[twitch dateTwitched]];
[formatter release], formatter = nil;
 

19voto

osteven Points 166

Vous avez besoin d'un autre formateur pour gérer la sortie. Mettez ceci après votre code:

 NSDateFormatter *anotherDateFormatter = [[NSDateFormatter alloc] init];   
[anotherDateFormatter setDateStyle:NSDateFormatterLongStyle];
[anotherDateFormatter setTimeStyle:NSDateFormatterShortStyle];
NSLog(@"%@", [anotherDateFormatter stringFromDate:myDate]);
 

19voto

david Points 128

Voici un exemple de code d'Apple

     NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
    NSDate *date = [formatter dateFromString:dateString];
 

lien: https://developer.apple.com/library/ios/#qa/qa1480/_index.html

12voto

Marcin Points 580

Il suffit de mentionner que depuis iOS 6.0, vous pouvez utiliser ce format:

  yyyy-MM-dd'T'HH:mm:ssZZZZZ
 

5voto

Colin Wheeler Points 2493

Je dois noter que la dernière fois que j'ai vérifié Apple, les méthodes NSDate ne prenaient pas en charge ISO8601. J'ai encore un problème avec Apple à propos de la mise en place d'un support officiel.

+ (id)dateWithNaturalLanguageString:(NSString *)string

(la dernière fois que je l'ai exécuté) va correctement analyser et créer un objet NSDate partir d'une chaîne ISO801, bien que la documentation indique que vous ne devriez pas l'utiliser, cela a fonctionné sur toutes les dates ISO8601 que j'ai essayées jusqu'à présent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X