NSDate tiene 5 horas de descanso

Ejecuto el siguiente código:

NSDate * now = [NSDate date];

NSLog(@"now: %@", now); 

y obten :

2011-09-16 16: 14: 16.434 iSavemore [1229: 7907] ahora: 2011-09-16 21:14:16 +0000

Como puede ver, estoy ejecutando esto a las 16:14:16 (4:14 p.m.) pero NSDate regresa a las 21:16:16 (9:14 p.m.). ¿Es esto un problema de Xcode4 o un problema de NSDate?

NSDate se establece de manera predeterminada en la zona horaria universal (también conocida como GMT).

Supongo que estás en algún lugar de la costa este, 5 horas detrás de UTC.

Intente agregar esto a su formateador de fecha …

 NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; [dateFormatter setLocale:[NSLocale currentLocale]]; 

… y deberías ver tu hora local.

Si desea utilizar una configuración regional especificada, en lugar de ‘currentLocale’, cree un NSLocale para la configuración regional pertinente.

 NSLocale *usLoc = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; [dateFormatter setLocale:usLoc]; 

… en realidad eso es EE. UU. (por lo que posiblemente no sea Central).

Aquí puede encontrar ayuda más específica sobre la zona horaria …

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html

Sin embargo, si desea mostrar el tiempo de caducidad, ¿no lo seguirá deseando en el actualLocale del usuario?

Si miras el resultado, verás que el registro incluye la zona horaria:

 2011-09-16 16:14:16.434 iSavemore[1229:7907] now: 2011-09-16 21:14:16 +0000 ^^^^^^ 

La marca de tiempo de su registro es la hora local. Supongo que se encuentra en una zona horaria 5 horas antes de UTC.

Un NSDate se refiere a un punto particular en el tiempo. Depende de usted mostrar esto como lo desee; usualmente con un NSDateFormatter.

Esta es la razón por la que verá muchas recomendaciones en contra de almacenar una hora o una fecha que no sea un NSDate. Si intenta almacenarlo como una cadena, se encontrará con muchos problemas más adelante al tratar de manejar la pantalla en diferentes zonas horarias.

Intente configurar el huso horario de su NSDate a uno que se ajuste a sus necesidades, por ejemplo [NSTimeZone localTimeZone]

Sólo una conjetura salvaje aquí, pero tal vez tiene algo que ver con las zonas horarias?