2009-04-23 8 views
19

je le code suivant:Description Chaîne de NSDate

[ [NSDate date] descriptionWithLocale: @"yyyy-MM-dd" ] 

Je veux revenir une date dans le format suivant: "2009-04-23"

Mais il retourne: jeudi, Avril 23, 2009 11:27:03 PM GMT + 03: 00

Qu'est-ce que je fais mal?

Merci à l'avance.

Répondre

32

Vous utilisez la mauvaise méthode. Essayez plutôt descriptionWithCalendarFormat:timeZone:locale:

[[NSDate date] descriptionWithCalendarFormat:@"%Y-%m-%d" 
            timezone:nil 
             locale:nil]; 

Notez également que la méthode attend un format différent de celui de votre question. La documentation complète pour cela peut être trouvée here.

EDIT: Bien que Mike a noté, vous devriez vraiment utiliser NSDateFormatter. Il y a quelques problèmes avec descriptionWithCalendarFormat:timezone:locale: qu'Apple mentionne dans la documentation.

+2

Déprécié .... –

+4

@NicHubbard: Cette méthode n'est ni dépréciée ni dépréciée. Au moins à partir de 10,6 (la version actuelle de Mac OS X). –

+4

Mais il semble que ce soit pour iOS. Il est temps d'être bavard et d'utiliser NSDateFormatter. – eddieroger

1

Si vous n'avez pas NSDate -descriptionWithCalendarFormat:timeZone:locale: disponible (je ne crois pas iPhone/Cocoa Touch comprend cela), vous devrez peut-être utiliser strftime et singe autour avec des chaînes de style C. Vous pouvez obtenir l'horodatage UNIX à partir d'un NSDate en utilisant NSDate -timeIntervalSince1970.

+0

Je suppose que c'est Cocoa standard comme descriptionWithLocale n'existe pas sur l'iPhone, non plus. –

+0

Bon point. J'ai vu une autre question similaire liée à l'iPhone, donc je pense que je vais re-poster cette réponse là-bas. – pix0r

10

Notez également que, dans la plupart des cas, NSDateFormatter est préférable pour sa flexibilité.

La réutilisation de formateurs de date dans de nombreuses applications présente également un avantage significatif en termes de performances.

+0

Quelle flexibilité? –

+1

Vous vous moquez de moi? Il suffit de regarder les documents pour voir comment c'est configurable! –

+1

Je ne gosse pas. Je me demande simplement quelles sont les flexibilités nombreuses et variées que NSDateFormatter a effectivement eu sur la question. –

91
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd"]; 
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]]; 
[dateFormatter release]; // delete this line if your project uses ARC 
NSLog(@"%@",dateString); 
+8

Pour des raisons locales, vous ne devez pas définir explicitement les formats de date et d'heure. À la place, utilisez les styles adaptés aux paramètres régionaux: '[dateFormatter setDateStyle: NSDateFormatterMediumStyle]; [dateFormatter setTimeStyle: NSDateFormatterMediumStyle]; ' –

+1

@GrahamPerks ce n'est pas toujours vrai. Que se passe-t-il si, par exemple, vous générez une date à envoyer à une API Web qui devra être analysée par le serveur? –

+1

Assez juste. Je fais remarquer de ne pas copier aveuglément le code dans la réponse; Si la chaîne doit être vue par un utilisateur, elle doit être modifiée. –