原谅我是我不熟悉ObjectiveC。
我从/ Date(xxxxxxxxxxxxx-xxxx)/格式的.NET Web服务获取日期。我正在寻找有关如何最好地将其解析为NSDate对象的方向。我曾尝试在其上使用dateWithTimeIntervalSince1970,但它返回的日期是1969年,而我知道该日期是2006年。
寻找正确的方法来处理JSON日期的方向。
提前致谢!
作为学习Objective-C的.NET程序员,当我尝试使用.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设计了一种自定义日期格式,该格式本质上是一个标记字符串。格式是经过编码的字符串,其中包含标准的新Date(自1970年以来的毫秒)值。