【问题标题】:How to parse /Date(xxx+0000)/ in SBJSON如何在 SBJSON 中解析 /Date(xxx+0000)/
【发布时间】:2012-01-09 15:19:08
【问题描述】:

我正在尝试将带有 .NET 服务生成的日期的 JSON 解析为 NSDate 对象

{
 "Dashboard": {
    "Date": "/Date(1326063600000+0000)/"
    }
}

使用 SBJSON 转换这种格式化日期的方法是什么?我使用

将值提取到 NSString
//dict is NSDictionary with Dashboard
NSString* dateString=[dict objectForKey:@"Date"];

然后停了下来。任何建议将不胜感激。

【问题讨论】:

  • 这看起来像是一个以毫秒为单位的时间戳(1326063600000 -> Jan 8/12 5:00pm),时区偏移量为 0000(又名 GMT/UTC)。
  • 是的。我正在寻找优雅的方式来解析它。到目前为止,我想出了一种使用该值的子字符串作为时间戳(timeInterval)的方法。只是有点刺耳

标签: iphone objective-c sbjson


【解决方案1】:

这是我为从 .NET 解析而制作的类别

//parses a date from format "/Date(0000000000000+0000)/"
+(NSDate*)dateFromEpocString:(NSString*)epocString {

    if ([epocString isEqual:[NSNull null]])
        return nil;

    NSString* miliMinutes = [epocString substringWithRange:NSMakeRange(6,13)];
    long long minutesSince1970 = [miliMinutes longLongValue] / 1000;
    int timeOffset = [[epocString substringWithRange:NSMakeRange(19,3)] intValue];
    long long minutesOffset = timeOffset * 60 * 60;
    return [NSDate dateWithTimeIntervalSince1970:minutesSince1970 + minutesOffset];
}

【讨论】:

    【解决方案2】:

    从 cmets 中,听起来您已经提取了时间戳。

    你可能想使用 NSDate epoch 构造函数:dateWithTimeIntervalSince1970:

    NSDate *date = [NSDate dateWithTimeIntervalSince1970:SOME_TIME_INTERVAL];
    

    在这种情况下,SOME_TIME_INTERVAL 将是 NSTimeInterval(只是 double 的别名)值:1326063600。不要忘记将得到的值除以 1000。NSTimeInterval 以秒为单位,而不是毫秒。

    【讨论】:

    • 我一直在寻找更好的解决方案,但我想我会坚持下去。秒/毫秒提醒也 +1
    猜你喜欢
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多