2010-05-19 8 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, me rindo. ¿Por qué aDate a veces volvería como nulo?iPhone SDK Objective-C __DATE__ (fecha de compilación) no se puede convertir a NSDate

¿Debería importar si uso las líneas comentadas ... o sus líneas de reemplazo coincidentes?

+6

pequeña nota no merece una respuesta : debido a la forma en que funciona el preprocesador, para obtener __DATE__ como un NSString, simplemente puede escribir @__DATE__ –

Respuesta

20

Puede devolver cero si la configuración de Región del teléfono no es EE. UU. (O equivalente).

Pruebe a establecer la configuración regional del formateador a 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. Voy a intentar eso. Pensé que __DATE__ siempre se determinaría durante el tiempo de compilación ... y de acuerdo con la máquina que estaba compilando en (inglés). Entonces __DATE__ sería * SIEMPRE * en formato "1 de febrero de 2010". (No estoy pidiendo que se determine la fecha durante el tiempo de ejecución ... o en función de la configuración local del usuario.) – Susanna

+4

La macro '__DATE__' se determina en tiempo de compilación y se reemplaza por una cadena literal en ese formato . Pero su conversión de esa cadena en un NSDate ocurre en el tiempo de ejecución que se ve afectado por la región actual. – DyingCactus

9

Modificando ligeramente respuesta DyingCactus' de ARC código (para facilitar la copia-n-pegar) habilitado:

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