2011-04-27 28 views
6

我正在使用一個API將.NET DateTime對象返回到我的iOS應用程序中。我有點困惑在什麼事情上,日期時間看起來很好,當它離開API,但是當它有它通過JSON和進來的,看起來像這樣的字符串:將.NET中的DateTime對象格式化爲NSDate for objective-c

/Date(1303884000000-0600)/ 

跆拳道是那我怎樣才能把它變成一個NSDate對象?

謝謝!

回答

11

Parsing JSON dates on IPhone我發現下面的功能完善:

- (NSDate*) getDateFromJSON:(NSString *)dateString 
{ 
// Expect date in this format "/Date(1268123281843)/" 
int startPos = [dateString rangeOfString:@"("].location+1; 
int endPos = [dateString rangeOfString:@")"].location; 
NSRange range = NSMakeRange(startPos,endPos-startPos); 
unsigned long long milliseconds = [[dateString substringWithRange:range] longLongValue]; 
NSLog(@"%llu",milliseconds); 
NSTimeInterval interval = milliseconds/1000; 
return [NSDate dateWithTimeIntervalSince1970:interval]; 
} 
+0

請注意,這不處理時區偏移量。 – 2014-03-15 22:46:20

2

從1970年1月1日起,基本上你得到的是毫秒,UTC是-0600是時區偏移量。看看這個博客文章http://weblogs.asp.net/bleroy/archive/2008/01/18/dates-and-json.aspx

你可能必須編寫一個自定義NSDateFormatter來處理這種格式的日期,或者你可以在.NET中格式化(更簡單),在JSON中輸出一個字符串,然後使用一個標準的NSDateFormatter。

+0

我想不通爲什麼有3個額外的零字符串的結尾雖然。 使用帶有「1303884000000」的unix時間轉換器,我得到錯誤的日期。如果我擺脫了3個零並用「1303884000」轉換,我就可以得到正確的日期。 什麼是那些額外的零(或從)? – Buchannon 2011-04-27 21:00:07

+0

哦,我想這是1970年以來的毫秒,而不是幾秒鐘。因此,爲了解析這個NSDate,我必須去掉所有的字符,然後比較自1970年以來的時間? – Buchannon 2011-04-27 21:07:27

+0

你可以這樣做。如有必要,您可以添加/減去小時以調整時區。就像我以前說過的,你可能想在.NET端做更多的格式化,因爲它可能更容易:) – psy 2011-04-27 21:13:33

相關問題