原谅我,我对目标C还不熟悉.

I am getting back dates from a .NET webservice in the /Date(xxxxxxxxxxxxx-xxxx)/ format. I'm looking for some direction on how to best parse this into an NSDate object. I've tried using dateWithTimeIntervalSince1970 on it but it comes back with a date in the year 1969 for a date I know is in 2006.

寻找有关处理JSON日期的正确方式的一些方向.

提前谢谢!

推荐答案

作为一个.NET程序员学习Objective-C我在try 使用.Net网络服务.

起初我以为我可以使用NSDateFormatter...

I wrote the code to do it... I'm still learning Obj-C but I dont think It should've been this hard...

- (NSDate *) getJSONDate{
    NSString* header = @"/Date(";
    uint headerLength = [header length];

    NSString*  timestampString;

    NSScanner* scanner = [[NSScanner alloc] initWithString:self];
    [scanner setScanLocation:headerLength];
    [scanner scanUpToString:@")" intoString:&timestampString];

    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解决方案.

EDIT:

关于JSON日期时间格式...

Formatting to RFC1123 seems like a good idea to me right now. As I can probably pick it up easily using a NSDateFormatter.

Quote from Rick Strahl

There's no JavaScript date literal and Microsoft engineered a custom date format that is essentially a marked up string. The format is a string that's encoded and contains the standard new Date(milliseconds since 1970) value.

Json相关问答推荐

中间初始化的Jolt配置

Vega-Lite:文本笔画在外部

使用Jolt v.0.1.1向每个json元素添加一个键-值对

GO KaZaam转换返回意外结果

属性错误:';ActivitiesClient';对象没有属性';base_url';

当列为空时从 SQL 获取 JSON

XSLT 3.0 Json-to-xml,json 包含 html struct

条件性构建/修改嵌套对象数组

JSON 的自定义编组器,可以是字符串或 map[string]string / map[string]bool

如何将动态复杂 json 解析为dart 对象或模型

N1QL 搜索对象内的某些对象

PowerShell - 如何迭代 PSCustomObject 嵌套对象?

.NET 对象最灵活的序列化是什么,但实现起来很简单?

Python Flask-Restful POST 不采用 JSON 参数

什么 Python 框架用于没有前端的 REST/JSON Web 服务?

使用 JSONObject 在 Java 中为以下 struct 创建嵌套 JSON 对象?

在 Qt 4.7 中解析 JSON 的最简单方法

Spring Security 和 JSON 身份验证

如何使用 SwiftyJSON 将字符串转换为 JSON

如何从 JSON 响应中提取单个值?