WCF日期时间转换为NSDate

3

我正在使用一个返回JSON WCF日期时间的Web服务。

字符串格式如下: \/Date(1316397792913+0800)\/

我想要提取出1316397792,它是自1970年1月1日以来的秒数。这样我就可以使用NSDate timeIntervalSince1970方法获取当前时间。我裁剪掉了最后3个数字,因为它们是毫秒数,而timeIntervalSince1970接收的是秒数。

以下是我目前正在进行的操作,但对于2001年之前的日期(其自1970年以来的时间间隔小于10个字符)无效。

NSString *dateString = @"\/Date(1316397792913+0800)\/";
    NSLog(@"dateString :%@", dateString);

    NSDate *date = [NSDate dateWithTimeIntervalSince1970:
                    [[dateString substringWithRange:NSMakeRange(6, 10)] intValue]];
    NSLog(@"NSDate:%@", date);

dateString :/Date(1316397792913+0800)/
NSDate:2011-09-19 02:03:12 +0000

因此,我需要一个更好的方法来处理日期字符串,而不是每次都假设我们会获取10个字符。
1个回答

5

您可以简单地获取索引(和索引+之间的子字符串。类似下面这样:

NSRange begin = [dateString rangeOfString:"("];
NSRange end = [dateString rangeOfString:"+"];
NSString* milliSecondsSince1970 = [dateString substringWithRange:NSMakeRange(begin.location + 1, end.location - begin.location - 1)];

附言:检查一次性错误。


NSRange begin = [dateString rangeOfString:@"("]; 将返回检测到“(”的范围,而不是其后面。我该如何使其检测整数值? - Gavin
不要让它检测整数值。由于整数在'('之后开始,因此将其索引加1。已相应地编辑了我的答案。 - Akshay
是的,我看到了这个简单的方法。谢谢你! - Gavin
只是指出应该是 NSString* secondsSince1970 = [dateString substringWithRange:NSMakeRange(begin.location + 1, end.location - begin.location - 4)]; 我们需要去掉最后的三位数字,因为它是毫秒。 - Gavin
但是终点指向“+”,而不是“)”。毫秒位于“+”之后。 - Akshay
1316397792913 是毫秒数。+0800 是时区。 - Gavin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接