2011-04-29 93 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)