2011-04-27 49 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

相关问题