当前位置: 首页 > 面试题库 >

在iPhone上解析JSON日期

郭俊人
2023-03-14
问题内容

原谅我是我不熟悉ObjectiveC。

我从/ Date(xxxxxxxxxxxxx-xxxx)/格式的.NET
Web服务获取日期。我正在寻找有关如何最好地将其解析为NSDate对象的方向。我曾尝试在其上使用dateWithTimeIntervalSince1970,但它返回的日期是1969年,而我知道该日期是2006年。

寻找正确的方法来处理JSON日期的方向。

提前致谢!


问题答案:

作为学习Objective-C的.NET程序员,当我尝试使用.Net WebService时,我遇到了同样的问题。

起初我还以为我将能够使用NSDateFormatter
…我发现它的符号一个很好的参考这里,但我很快意识到,我需要的数量从毫秒转换为秒。

我写了代码来做到这一点…我仍在学习Obj-C,但我不认为它应该这么难…

- (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解决方案。如果不是这样,我可能会保留这种情况,或者正在寻找一种方法来更改.NET中的序列化格式

编辑:

关于JSON DateTime格式…如果您对服务有任何控制权,则最好将日期转换为DataContract对象中的字符串。

对我来说,格式化为RFC1123似乎是个好主意。因为我可能可以使用NSDateFormatter轻松地将其拾取。

引用里克·斯特拉尔的话

没有JavaScript日期文字,Microsoft设计了一种自定义日期格式,该格式本质上是一个标记字符串。格式是经过编码的字符串,其中包含标准的新Date(自1970年以来的毫秒)值。



 类似资料:
  • 问题内容: 谁能推荐C或Objective-C库进行HTML解析?它需要处理无法完全验证的凌乱的HTML代码。 这样的库是否存在,还是我最好只是尝试使用正则表达式? 问题答案: 看起来像是SDK中附带的,并具有以下特征: 该模块使用与XML解析器兼容的API来实现HTML4.0非验证解析器。即使从规范的角度来看严重损坏,它也应该能够解析“真实世界”的HTML。 这听起来像我所需要的,所以我可能会使

  • 问题内容: 作为一种学习经验,我想制作一个iPhone应用程序,该应用程序调用Web服务器/ Web服务,检索JSON响应,并使用该响应来填充的行(假设它将JSON转换为第一个)。 任何人都知道有用的东西吗? 问题答案: 您会喜欢这个框架的。 并且您会喜欢这个工具的。 为了了解JSON,您可能需要此资源。 而且您可能会喜欢本教程。

  • 问题内容: 我正在尝试解析json请求中的Datetime。该请求看起来像这样: 它被解码成的结构看起来像这样: 解码行如下所示: Revel返回此错误: 根据此处的revel文档,https://revel.github.io/manual/parameters.html 在同一文档中,他们还说您可以附加如下格式: 为了验证格式是否在数组中,我尝试了以下方法: 在绝望的最后一幕中,我尝试以rev

  • 问题内容: 我在Swift的应用程序中有一个返回JSON,并且有一个返回日期的字段。当我引用此数据时,代码会给我类似“ / Date(1420420409680)/”的信息。如何将其转换为NSDate?请在Swift中用Objective-C测试示例,但没有成功。 问题答案: 这看起来与Microsoft的ASP.NET AJAX使用的日期的JSON编码非常相似,JavaScript和.NET中的

  • 问题内容: 我从android应用中的服务器获取了一个1970年后毫秒数的json字符串。 看起来是这样的:。 如何将其解析为Java日历对象,或者仅从中获取一些日期值?我应该从正则表达式开始,只是得到millisecons吗?服务器是.NET。 谢谢 问题答案: 时间似乎也有时区,所以我会做这样的事情:

  • 问题内容: 我使用以下代码从JSON响应中获取响应。它在ios5中可以很好地工作,但对于ios4则不起作用。那么什么是ios4中的解决方案。 如果有人知道这一点,请帮助我。 问题答案: 因为它仅在iOS 5.0+和Mac OS X 10.7+上受支持。我认为您也可以尝试使用第三方JSON库 > >>编辑 适用于iOS4和iOS5的Jsonkit 希望这个能对您有所帮助..