将来自.NET的DateTime对象格式化为Objective-C中的NSDate对象

8

我正在使用一个API与我的iOS应用程序交互,该API返回一个.NET DateTime对象。我有些困惑,因为DateTime在离开API时看起来很正常,但是当它通过JSON进入时,它会以如下字符串的形式出现:

/Date(1303884000000-0600)/

这是什么东西,我怎样才能将它转换为NSDate对象?

谢谢!

3个回答

12

我从解析iPhone上的JSON日期中发现了下面这个函数非常完美:

    - (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];
}

请注意,这并未处理时区偏移。 - Kristopher Johnson

4

这应该是对问题的回答 - vishal dharankar

2
基本上,你所得到的是自1970年1月1日UTC以来的毫秒数,而“-0600”则是时区偏移量。请查看此博客文章:http://weblogs.asp.net/bleroy/archive/2008/01/18/dates-and-json.aspx
你可能需要编写一个自定义的NSDateFormatter来处理这种格式的日期,或者你可以在.NET中进行格式化(更容易),输出JSON字符串,然后使用标准的NSDateFormatter。

我搞不清为什么字符串末尾会有三个额外的零。 使用Unix时间转换器转换"1303884000000"时,我得到了错误的日期。如果我去掉三个零并用"1303884000"进行转换,我就得到了正确的日期。那些额外的零是干什么的(或来自哪里)? - Buchannon
哦,我猜它是自1970年以来的毫秒数,而不仅仅是秒数。所以要将其解析为NSDate,我需要剥离所有字符,然后比较自1970年以来的时间吗? - Buchannon
你可以这样做。如果需要,您可以添加/减去小时来调整时区。正如我之前所说,您可能希望在.NET端进行一些更多的格式化,因为那样可能更容易 :) - psy
问题解决了,还编写了一个用于解析的函数! - Buchannon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接