我正在使用一個API將.NET DateTime對象返回到我的iOS應用程序中。我有點困惑在什麼事情上,日期時間看起來很好,當它離開API,但是當它有它通過JSON和進來的,看起來像這樣的字符串:將.NET中的DateTime對象格式化爲NSDate for objective-c
/Date(1303884000000-0600)/
跆拳道是那我怎樣才能把它變成一個NSDate對象?
謝謝!
我正在使用一個API將.NET DateTime對象返回到我的iOS應用程序中。我有點困惑在什麼事情上,日期時間看起來很好,當它離開API,但是當它有它通過JSON和進來的,看起來像這樣的字符串:將.NET中的DateTime對象格式化爲NSDate for objective-c
/Date(1303884000000-0600)/
跆拳道是那我怎樣才能把它變成一個NSDate對象?
謝謝!
從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];
}
從1970年1月1日起,基本上你得到的是毫秒,UTC是-0600是時區偏移量。看看這個博客文章http://weblogs.asp.net/bleroy/archive/2008/01/18/dates-and-json.aspx
你可能必須編寫一個自定義NSDateFormatter來處理這種格式的日期,或者你可以在.NET中格式化(更簡單),在JSON中輸出一個字符串,然後使用一個標準的NSDateFormatter。
我想不通爲什麼有3個額外的零字符串的結尾雖然。 使用帶有「1303884000000」的unix時間轉換器,我得到錯誤的日期。如果我擺脫了3個零並用「1303884000」轉換,我就可以得到正確的日期。 什麼是那些額外的零(或從)? – Buchannon 2011-04-27 21:00:07
哦,我想這是1970年以來的毫秒,而不是幾秒鐘。因此,爲了解析這個NSDate,我必須去掉所有的字符,然後比較自1970年以來的時間? – Buchannon 2011-04-27 21:07:27
你可以這樣做。如有必要,您可以添加/減去小時以調整時區。就像我以前說過的,你可能想在.NET端做更多的格式化,因爲它可能更容易:) – psy 2011-04-27 21:13:33
的RestKit圖書館有一個NSDateFormatter子類實現這個功能。看看這裏尋找靈感:
https://github.com/RestKit/RestKit/blob/master/Code/Support/RKDotNetDateFormatter.h https://github.com/RestKit/RestKit/blob/master/Code/Support/RKDotNetDateFormatter.m
這應該是問題的答案 – 2015-03-08 06:18:25
請注意,這不處理時區偏移量。 – 2014-03-15 22:46:20