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, mi arrendo. Perché a volte un appuntamento potrebbe tornare come zero?iPhone SDK Objective-C __DATE__ (data di compilazione) non può essere convertito in un NSDate

Dovrebbe importare se utilizzo le righe commentate ... o le loro linee di sostituzione corrispondenti?

+6

piccola nota non vale la pena una risposta : a causa del modo in cui funziona il preprocessore, per ottenere __DATE__ come NSString è sufficiente scrivere @__DATE__ –

risposta

20

Può restituire zero se l'impostazione di Paese del telefono non è USA (o equivalente).

Prova a impostare locale del formattatore su 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. Ci proverò. Ho pensato che il __DATE__ sarebbe sempre stato determinato durante la compilazione ... e in base alla macchina che stavo compilando (in inglese). Quindi __DATE__ dovrebbe * SEMPRE * essere nel formato "1 febbraio 2010". (Non sto chiedendo la data da determinare durante l'esecuzione ... o in base alle impostazioni locali dell'utente.) – Susanna

+4

La macro '__DATE__' è determinata al momento della compilazione e sostituita con una stringa letterale in quel formato . Ma la conversione di quella stringa in un NSDate avviene in fase di esecuzione, influenzata dalla regione corrente. – DyingCactus

9

modificando leggermente la risposta DyingCactus' per ARC abilitato il codice (per facilitare la copia-n-incolla):

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];