126 votes

Comment puis-je obtenir la date ISO 8601 dans iOS?

Il est assez facile d'obtenir la chaîne de date ISO 8601 (par exemple, 2004-02-12T15:19:21+00:00 ) en PHP via date('c') , mais comment l'obtenir dans Objective-C (iPhone)? Y a-t-il un moyen similaire de le faire?

Voici le long chemin que j'ai trouvé pour le faire:

 NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ssZ";

NSDate *now = [NSDate date];
NSString *formattedDateString = [dateFormatter stringFromDate:now];
NSLog(@"ISO-8601 date: %@", formattedDateString);

// Output: ISO-8601 date: 2013-04-27T13:27:50-0700
 

Semble énormément de rigamarole pour quelque chose d'aussi central.

222voto

rmaddy Points 79279

Utilisez NSDateFormatter :

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];   
NSLocale *enUSPOSIXLocale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
[dateFormatter setLocale:enUSPOSIXLocale];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];

NSDate *now = [NSDate date];
NSString *iso8601String = [dateFormatter stringFromDate:now];
 

29voto

Etienne Points 291

En complément de la réponse de maddy, le format de fuseau horaire devrait être "ZZZZZ" (5 fois Z) pour ISO 8601 au lieu d'un seul "Z" (format RFC 822). Au moins sur iOS 6.

(voir http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns )

8voto

David H Points 23654

Utilisez donc la catégorie de Sam Soffee sur NSDate trouvée ici . Avec ce code ajouté à votre projet, vous pouvez désormais utiliser une seule méthode sur NSDate:

 - (NSString *)sam_ISO8601String
 

Ce n'est pas seulement une ligne, c'est beaucoup plus rapide que l'approche NSDateFormatter, car elle est écrite en C pur.

0voto

Bogidon Points 30

C'est le seul NSDateFormatter que j'ai pu travailler avec ISO 8601:

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSLocale *enUSLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];

[dateFormatter setLocale:enUSLocale];
[dateFormatter setDateFormat:@"yyyy'-'MM'-'dd' 'HH':'mm':'ss'"];
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
 

Pour info, ma date d'entrée était:

2014-02-22 00:00:00

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