2011-09-21 18 views
5

Tengo muchas dificultades para convertir esta marca de tiempo en una buena cadena de fecha formateada.Objective-C: ayúdame a convertir una marca de tiempo en una fecha/hora formateada

Aquí está la marca de tiempo: "1316625985"

Y aquí es la función que he hecho:

-(NSString*)timestamp2date:(NSString*)timestamp{ 
    NSString * timeStampString =timestamp; 
    //[timeStampString stringByAppendingString:@"000"]; //convert to ms 
    NSTimeInterval _interval=[timeStampString doubleValue]; 
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:_interval]; 
    NSDateFormatter *_formatter=[[NSDateFormatter alloc]init]; 
    [_formatter setDateFormat:@"dd/MM/yy"]; 
    return [_formatter stringFromDate:date]; 
} 

El problema es que mantiene las fechas que regresan en 1972! (31/7/72) Esto es incorrecto, ya que es una fecha de septiembre de 2011 ...

¿Alguien puede sugerir alguna solución?

Muchas gracias de antemano,

+0

¿Ha intentado trabajar con NSCalendar y NSDateComponents para formar su objeto de fecha? Así es como terminé haciéndolo en el pasado. –

+0

¿Terminaste resolviendo esto? – bryanmac

Respuesta

2

¿Ha comprobado que la cadena (timestampString) y el valor doble (_interval) son los mismos, y que el doubleValue realmente tiene en cuenta todos los caracteres de la cadena?

¿Tal vez la interpretación de la cuerda en cosechas dobles el valor?


es que también están seguros de que la marca de tiempo que está interpretting es realmente una marca de tiempo UNIX, lo que significa que cuenta el número de segundos transcurridos desde 01/01/1970 (y no días desde el 01/01/1970? ... o no segundos pero desde otra fecha?)

(Tal vez dar un ejemplo del valor de la marca de tiempo que usted está tratando de interpretar)

+0

Dio un ejemplo de la marca de tiempo anterior. Lo intenté y la cuerda y el doble son iguales, así que no es eso. – bryanmac

14

No está Epoch segundos desde 1/1/1970? ¿Estás seguro de que no dejaste la línea de milisegundos?

Cuando ejecuté tu lógica (sin tu línea anexar 000 por ms), funcionó. Esto es lo que hice:

NSString * timeStampString = @"1316641549"; 
    NSTimeInterval _interval=[timeStampString doubleValue]; 
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:_interval]; 
    NSLog(@"%@", date); 

Se da salida:

2011-09-21 17: 46: 14.384 Craplet [13218: 707] 2011-09-21 21:45:49 +0000

+0

Ok gracias. Me estoy quedando dormido aquí. Tendré que mirarlo por la mañana. ¡Tendré felices sueños ahora! – Eamorr

+0

Genial: cierre la fecha como lo hago arriba para asegurarse de que no está golpeando ningún problema de formato ... – bryanmac

2

puede pasar [timeStampString doubleValue] directamente en dateWithTimeIntervalSince1970: en lugar de convertirlo en un NSTimeInterval.

Además, intente agregar algunas declaraciones NSLog para ver cuáles son sus valores en varios puntos, lo que debería ayudar a localizar dónde está la diferencia.

Espero que esto ayude!

1

Mientras usa NSInterval para obtener el intervalo, asegúrese de que la marca de tiempo esté en segundos y no en milisegundos. Si está en milisegundos, simplemente divida el valor de NSInterval por 1000 y luego intente formatearlo.

4

Sólo dividir su [timeStampString doubleValue] por mil como:

NSDate *date = [NSDate dateWithTimeIntervalSince1970:[timeStampString doubleValue]/1000.0]; 
NSDateFormatter *_formatter=[[NSDateFormatter alloc]init]; 
[_formatter setDateFormat:@"dd/MM/yy"]; 
return [_formatter stringFromDate:date]; 

o tratar [timeStampString longLongValue] /1000.0 lugar

buena suerte!

Cuestiones relacionadas