通過服務器收到的json時間格式是/Date(xxxxxxxxxxxxx+xxxx)/,其中前半部分是自1970年的millionSecs,后半部是時區,我們需要對齊進行轉換。
解決方式有兩種,第一種就是在服務端將時間轉換為字符串再發送,那樣在IOS端直接用NSDateFormater就能獲得時間
如果你對服務端沒選擇的話,就要自己轉換了
只要明白xxxxxxxxxxxxx+xxxx的格式的意義我們就有思路了
首先通過正則表達式取出時間部分和時區部分,計算就可以了
代碼如下
+ (NSDate *)DateFromDotNetJSONString:(NSString *)string { static NSRegularExPRession *dateRegEx = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ dateRegEx = [[NSRegularExpression alloc] initWithPattern:@"^///date//((-?//d++)(?:([+-])(//d{2})(//d{2}))?//)///$" options:NSRegularExpressionCaseInsensitive error:nil]; }); NSTextCheckingResult *regexResult = [dateRegEx firstMatchInString:string options:0 range:NSMakeRange(0, [string length])]; if (regexResult) { // milliseconds NSTimeInterval seconds = [[string substringWithRange:[regexResult rangeAtIndex:1]] doubleValue] / 1000.0; // timezone offset if ([regexResult rangeAtIndex:2].location != NSNotFound) { NSString *sign = [string substringWithRange:[regexResult rangeAtIndex:2]]; // hours seconds += [[NSString stringWithFormat:@"%@%@", sign, [string substringWithRange:[regexResult rangeAtIndex:3]]] doubleValue] * 60.0 * 60.0; // minutes seconds += [[NSString stringWithFormat:@"%@%@", sign, [string substringWithRange:[regexResult rangeAtIndex:4]]] doubleValue] * 60.0; } return [NSDate dateWithTimeIntervalSince1970:seconds]; } return nil;}
新聞熱點
疑難解答