2011-04-29 65 views
40

如何从Unix时间戳创建NSDate?从Unix时间戳创建NSDate

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

我得到这个错误:

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

channels.startDateNSDate*。关键字“broadcastStartedTime”的值是由SBJson解析器库转换为NSNumberNSDecimalNumber的Javascript Number

回答

51

试试这个:

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

你的价值是被困在一个指针类型的NSNumber。方法dateWithTimeIntervalSince1970期望原始NSTimeInterval(其在下面是double)。

4

你需要解开的的NSNumber:

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

使用-doubleValue

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

有什么错我的类型转换? – JoJo 2011-04-29 02:38:08

+0

您不能将Objective-C对象(如NSNumber)强制转换为基元(如double)。编译时铸造只能从原始到原始,或从对象到对象。这就是为什么我们不得不调用'doubleValue'方法;在运行时转换为双精度。 – 2011-04-29 03:38:19

0

NSTimeInterval(这是UNIX timestmap)以NSDate转换斯威夫特:

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