我正在使用一个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