2011-04-29 15 views
40

¿Cómo creo un NSDate a partir de una marca de tiempo Unix?Crear NSDate a partir de la marca de tiempo de Unix

channel.startDate = [NSDate dateWithTimeIntervalSince1970: 
(NSTimeInterval)[channelJson objectForKey:@"broadcastStartedTime"]]; 

me sale este error:

104: error: pointer value used where a floating point value was expected

channels.startDate es un NSDate*. El valor para la clave "broadcastStartedTime" es un Javascript Number convertido a NSNumber o NSDecimalNumber por la biblioteca del analizador SBJson.

Respuesta

51

probar este lugar:

NSNumber *startTime = channelJson[@"broadcastStartedTime"]; 
channel.startDate = [NSDate dateWithTimeIntervalSince1970:[startTime doubleValue]]; 

Su valor está atrapado en un tipo de puntero de NSNumber. El método dateWithTimeIntervalSince1970 espera una primitiva NSTimeInterval (que, debajo de las cubiertas, es double).

4

Necesitas desenvolver el NSNumber:

channel.startDate = [NSDate dateWithTimeIntervalSince1970:[[channelJson objectForKey:@"broadcastStartedTime"] doubleValue]]; 
7

Uso -doubleValue:

// NSTimeInterval is just a typedef for double 
NSTimeInterval interval = [[channelJson objectForKey:@"broadcastStartedTime"] doubleValue]; 
channel.startDate = [NSDate dateWithTimeIntervalSince1970:interval]; 
+0

Lo que estaba mal con mi encasillamiento? – JoJo

+0

No puede convertir un objeto Objective-C (como NSNumber) en un primitivo (como double). La conversión en tiempo de compilación solo funciona de primitiva a primitiva, o de objeto a objeto. Es por eso que tuvimos que llamar al método 'doubleValue'; para convertir en tiempo de ejecución a un doble. –

0

NSTimeInterval (que es timestmap UNIX) a NSDate conversión en Swift:

let timeInterval = NSDate().timeIntervalSince1970 // the the unix timestamp 
NSDate(timeIntervalSince1970: timeInterval) 
Cuestiones relacionadas