2010-05-19 6 views
5
//NSString *compileDate = [NSString stringWithFormat:@"%s", __DATE__]; 
NSString *compileDate = [NSString stringWithUTF8String:__DATE__]; 

NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease]; 

[df setDateFormat:@"MMM d yyyy"]; 
//[df setDateFormat:@"MMM dd yyyy"];  

NSDate *aDate = [df dateFromString:compileDate]; 

Ok, j'abandonne. Pourquoi aDate reviendrait-il parfois à zéro?iPhone SDK Objectif-C __DATE__ (date de compilation) ne peut pas être converti en un NSDate

Faut-il importer si j'utilise les lignes commentées ... ou leurs lignes de remplacement correspondantes?

+6

ne vaut pas une réponse : en raison de la façon dont le préprocesseur fonctionne, pour obtenir __DATE__ en tant que NSString, vous pouvez simplement écrire @__DATE__ –

Répondre

20

Il peut retourner zéro si le paramètre Région du téléphone n'est pas US (ou équivalent).

Essayez de régler les paramètres régionaux du formatter en_US:

NSString *compileDate = [NSString stringWithUTF8String:__DATE__]; 
NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease]; 
[df setDateFormat:@"MMM d yyyy"]; 
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 
[df setLocale:usLocale]; 
[usLocale release]; 
NSDate *aDate = [df dateFromString:compileDate]; 
+0

Wow. Je vais essayer ça. Je pensais que __DATE__ serait toujours déterminé pendant la compilation ... et basé sur la machine sur laquelle je compilais (anglais). Donc __DATE__ serait * TOUJOURS * au format "Feb 1 2010". (Je ne demande pas que la date soit déterminée pendant l'exécution ... ou en fonction du paramètre local de l'utilisateur.) – Susanna

+4

La macro '__DATE__' est déterminée au moment de la compilation et remplacée par une chaîne littérale dans ce format . Mais votre conversion de cette chaîne en un NSDate se produit au moment de l'exécution qui est affectée par la région actuelle. – DyingCactus

9

modifiant légèrement la réponse de DyingCactus pour ARC activé le code (pour faciliter la copie-n-coller): petite note

NSString *compileDate = [NSString stringWithUTF8String:__DATE__]; 
NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
[df setDateFormat:@"MMM d yyyy"]; 
NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 
[df setLocale:usLocale]; 
NSDate *aDate = [df dateFromString:compileDate]; 
Questions connexes