Можно добраться путем присоединения на номер строки . Это возможно, потому что, так как это - идентификационные данные, это просто увеличит, поскольку Вы добавляете объекты, которые будут в порядке, что Вы выбираете их.
Как .NET-программист, изучающий Objective-C, у меня была та же проблема, когда я пытался использовать .Net WebService.
Сначала я думал, что смогу использовать NSDateFormatter. .. Я нашел действительно хорошую ссылку на его символы здесь , но я быстро понял, что мне нужно преобразовать число из миллисекунд в секунды.
Я написал код для этого ... Я все еще изучаю Obj-C, но не думаю, что это должно было быть так сложно ...
- (NSDate *) getJSONDate{
NSString* header = @"/Date(";
uint headerLength = [header length];
NSString* timestampString;
NSScanner* scanner = [[NSScanner alloc] initWithString:self];
[scanner setScanLocation:headerLength];
[scanner scanUpToString:@")" intoString:×tampString];
NSCharacterSet* timezoneDelimiter = [NSCharacterSet characterSetWithCharactersInString:@"+-"];
NSRange rangeOfTimezoneSymbol = [timestampString rangeOfCharacterFromSet:timezoneDelimiter];
[scanner dealloc];
if (rangeOfTimezoneSymbol.length!=0) {
scanner = [[NSScanner alloc] initWithString:timestampString];
NSRange rangeOfFirstNumber;
rangeOfFirstNumber.location = 0;
rangeOfFirstNumber.length = rangeOfTimezoneSymbol.location;
NSRange rangeOfSecondNumber;
rangeOfSecondNumber.location = rangeOfTimezoneSymbol.location + 1;
rangeOfSecondNumber.length = [timestampString length] - rangeOfSecondNumber.location;
NSString* firstNumberString = [timestampString substringWithRange:rangeOfFirstNumber];
NSString* secondNumberString = [timestampString substringWithRange:rangeOfSecondNumber];
unsigned long long firstNumber = [firstNumberString longLongValue];
uint secondNumber = [secondNumberString intValue];
NSTimeInterval interval = firstNumber/1000;
return [NSDate dateWithTimeIntervalSince1970:interval];
}
unsigned long long firstNumber = [timestampString longLongValue];
NSTimeInterval interval = firstNumber/1000;
return [NSDate dateWithTimeIntervalSince1970:interval];
}
Надеюсь, кто-нибудь сможет предоставить лучшее решение Obj-C. Если нет, я могу оставить это или поищу способ изменить формат сериализации в .NET
РЕДАКТИРОВАТЬ:
Об этом формате JSON DateTime ... Если у вас есть какой-либо контроль над службой, вероятно, лучше всего будет преобразовать дату в строку в ваших объектах DataContract.
Форматирование в RFC1123 сейчас кажется мне хорошей идеей. Поскольку я, вероятно, легко могу подобрать его с помощью NSDateFormatter.
Цитата из Рика Стрела
Там нет литерала даты в JavaScript, и Microsoft разработала собственный формат даты, который по сути является размеченной строкой. Формат представляет собой закодированную строку, содержащую стандартное новое значение даты (миллисекунды с 1970 года).
Используйте метод NSDateFormatter
dateFromString:
после установки формата даты .
Я был в той же лодке, когда использовал json-framework, который не поддерживает формат даты, поскольку это не официальный JSON. Мой источник взят из API, созданного с использованием JSON.Net. Вот что я придумал:
- (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];
}
У меня нет добавленной части в формате даты, который вы делаете, поэтому я не занимался этим, как ответ выше. Никаких ошибок не обнаружено, на данный момент для меня это все в новинку.