Как программист .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
EDIT:
О том формате JSON DateTime ...
Если у вас есть какой-либо контроль над службой, вероятно, было бы лучше преобразовать дату в строку в ваших объектах DataContract.
Форматирование в RFC1123 кажется мне хорошей идеей прямо сейчас. Как я могу, вероятно, легко подобрать его с помощью NSDateFormatter.
Цитата из Рик Штрал
В JavaScript нет литерала даты, и Microsoft разработала специальный формат даты, который по сути является размеченной строкой. Формат представляет собой строку, которая закодирована и содержит стандартное новое значение даты (в миллисекундах с 1970 года).