【问题标题】:WCF DateTime to NSDateWCF 日期时间到 NSDate
【发布时间】:2011-09-27 02:10:04
【问题描述】:

我正在使用返回 JSON WCF DateTime 的 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

因此,我需要更好地解决使用 dateString 的问题,它并不假设每次我们都会获取 10 个字符。

【问题讨论】:

    标签: iphone objective-c ios wcf nsdate


    【解决方案1】:

    您可以简单地获取( 的索引和+ 的索引之间的子字符串。比如:

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

    P.S:检查一次性错误。

    【讨论】:

    • NSRange begin = [dateString rangeOfString:@"("]; 将返回它检测到“(”的范围,而不是在它之后。我如何让它检测一个整数值呢?跨度>
    • 不要让它检测整数值。由于整数在“(”之后开始,因此将其索引加 1。相应地编辑了我的答案。
    • 是的,我看到了这个简单的出路。谢谢!
    • 只是指出它应该是NSString* secondsSince1970 = [dateString substringWithRange:NSMakeRange(begin.location + 1, end.location - begin.location - 4)]; 我们需要剪掉最后三位数字,因为它以毫秒为单位。
    • 但端点指向 '+',而不是 ')'。毫秒数字在 + 之后。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多