如何在objective-c中将JSON日期反序列化为NSDate?

时间:2016-03-08 16:18:56

标签: objective-c json date datetime jsonmodel

我有一个源日期字符串

/日期(1455895287677-0500)/

在objective-c中。我需要将其转换为“2015-01-01 HH:MM:SS”

之类的格式

如何将其转换为Date或NSDate?

我正在使用JSONModel,但似乎无效。

2 个答案:

答案 0 :(得分:1)

嗯,它是日期的非标准格式。看起来像1970年以来的毫秒,再加上时区。您不需要将其转换为类似" 2015-01-01 HH:MM:SS",您需要一个NSDate。

取字符串,检查它是以/ Date开头(并以#结尾)并删除它们,检查两者之间是否有+或 - ,分成+或 - 之前的部分以及从中开始的部分+或 - ,为第一部分调用doubleValue并除以1000(因此你有自1970年以来的秒数),为第二部分调用integerValue,所以你得到小时和分钟但是以十进制格式。取整数值,除以100得到小时,从数字中减去小时数100,剩下的就是分钟。添加小时* 3600和分钟* 60到时间。然后[NSDate dateWithTimeIntervalSince1970]。

显然做一些测试,记录是否有任何你没想到的并确保你处理它。

答案 1 :(得分:0)

正如我在我的问题中提到的,我最初尝试使用JSONModel来反序列化日期字符串,例如“/ Date(1455895287677-0500)/”,但它失败了。原因是JSONModel不支持NSDate。

但是,幸运的是,我们可以通过修改和添加JSONModel方法来实现这一目标。

  1. 如果您使用JSONModel(https://github.com/icanzilb/JSONModel)反序列化您的JSON字符串,则在JSONModel.m中将 [NSDate类] 添加到 allowedJSONTypes

  2. 在文件夹 JSONModelTransformations JSONValueTransformer + NSDate.m .h 文件的文件(您可以重命名它们) >

  3. 将此代码添加到新创建的 .m 文件中,不要忘记 .h 文件中的写入界面(我计划将方法添加到JSONValueTransformer .m文件,但为了区分,我决定创建新的.m和.h文件。)

    (NSDate )NSDateFromNSString:(NSString )string {

            NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
            [formatter setDateFormat:APIDateFormat];
            return [formatter dateFromString:string]; 
    

    }

  4. Parsing JSON dates on IPhone中@jasongregori提供的方法添加到新创建的 .m 文件中。

  5. 步骤3 中的方法将处理日期格式,如“2013-08-26T15:23:37.832Z”。如果日期格式与此/日期(*********** - ****)/类似,则必须在步骤4 中调用方法。

    < / LI>