2016-01-15 71 views
-2

這似乎是一個非常受歡迎的問題,但我還沒有找到適用於我的情況的答案。正確地將一個NSString轉換爲NSDate

考慮我行代碼:

classHour.StartPoint = [NSDate dateWithTimeIntervalSince1970:[[thisEvent valueForKey:@"Start"] doubleValue]]; 

classHour.StartPoint是一個NSDate。

thisEvent valueForKey:@ 「開始」是價值@的一個NSString 「2016-01-13T07:30:00.0000000Z」

但不知何故,classHour.StartPoint得到的「1970-01-的值01 00:33:36 UTC'

我的問題是雙重的: 爲什麼會發生這種情況,以及 - 當糾正 - 我真的結束了一個有效的NSDate?

回答

2

這是行不通的原因是因爲你試圖從字符串中獲取一個double值。 我是你的情況下字符串是2016-01-13T07:30:00.0000000Z,這不是一個雙值,因此價值回報是2016

2016返回,因爲-不是有效的雙精度值,這是解析停止的地方。但由dateWithTimeIntervalSince1970:創建的日期是正確的,因爲它是從1-1-1970 00:00:00開始的2016秒​​。

您將需要使用NSDateFormater從字符串中獲取正確的日期值。

NSDateFormatter *dateFormatter= [NSDateFormatter new]; 
dateFormatter.dateFormat = @"yyyy'-'mm'-'dd'T'HH:mm:ss.AZ"; 

NSString *dateString =[thisEvent valueForKey:@"Start"]; 
NSDate *date = [dateFormatter dateFromString:test]; 
+0

非常感謝!自從我與NSDates合作已經有一段時間了。 – Sjakelien

+0

@rckoenes:這個問題顯然是重複的,你能解釋一下,爲什麼你重新打開它? – vikingosegundo

+0

我結束了「formatter.dateFormat = @」yyyy' - 'mm' - 'dd'T'HH:mm:ss.0000000Z「;」讓它在我的情況下工作。 – Sjakelien