2012-06-06 20 views
7

Obtengo algunos start_times y end_times en la forma de NSDecimalNumber s de una solicitud de API.Convirtiendo una marca de tiempo de UNIX a NSdate usando la zona horaria local

He logrado convertir estos NSDecimalNumber s en NSDate s, pero el código no tiene en cuenta las zonas horarias.

Necesito que use la zona horaria predeterminada en el dispositivo.

+0

Posible duplicado de [convertir el tiempo de época a NSDate en cacao/iPhone] (http://stackoverflow.com/q/2609561/608157) –

+0

Otro posible duplicado es [Convertir tiempo de época a NSDate con buena zona horaria con Objetivo c] (http: //stackoverflow.com/q/6655446/608157) –

+1

Hay ot ella también ... usa el campo de búsqueda en la esquina superior derecha antes de hacer preguntas. Es el primer tema en la página ["Cómo preguntar"] (http://stackoverflow.com/questions/how-to-ask) –

Respuesta

28

Esto debería hacer lo que necesita con la localización actual

double unixTimeStamp =1304245000; 
NSTimeInterval _interval=unixTimeStamp; 
NSDate *date = [NSDate dateWithTimeIntervalSince1970:_interval]; 
NSDateFormatter *formatter= [[NSDateFormatter alloc] init]; 
[formatter setLocale:[NSLocale currentLocale]]; 
[formatter setDateFormat:@"dd.MM.yyyy"]; 
NSString *dateString = [formatter stringFromDate:date]; 
9

tiempo Unix doesn't have a time zone. se define en la UTC como el número de segundos transcurridos desde la medianoche Ene 1970. 1

Debe obtener los NSDates en la zona horaria correcta mediante el uso de

[NSDate dateWithTimeIntervalSince1970:myEpochTimestamp]; 
+0

Hola David, ¿cuál es la tuya correcta o la correcta? – Hemang

+0

Ambas respuestas hacen lo mismo cuando se trata de crear el objeto de fecha. El resto es solo formatear. –

+0

Gracias por la respuesta, pero solo me preocupa esta línea '[formateador setLocale: [NSLocale currentLocale]];' la salida puede variar? – Hemang

7

Pruebe algo como esto ..

NSDate* sourceDate = ... // your NSDate 

NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone]; 

NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate]; 
NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate]; 
NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset; 

NSDate* destinationDate = [[[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate] autorelease]; 
Cuestiones relacionadas