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

问题描述:

我有一个源日期字符串如何将JSON日期反序列化到objective-c中的NSDate?

/日期(1455895287677-0500)/

在目标c

。我需要将其转换为格式,如“2015-01-01 HH:MM:SS”

如何将它转换为Date或NSDate?

我正在使用JSONModel,但它似乎不工作。

+0

数字代表什么?对于UNIX时间戳太大了 – vadian

+0

@vadian:将数字除以60 * 60 * 24 * 365.25即可得出约46,000。我们是1970年以前的46年。显然这是自毫秒以来的时间 – gnasher729

+0

这是有道理的:-) – vadian

嗯,这是日期的非标准格式。看起来像1970年以来的毫秒,加上时区。你不需要将它转换成“2015-01-01 HH:MM:SS”之类的东西,你想要一个NSDate。

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

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

+0

谢谢! @ gnasher729它的工作原理。 –

+0

其实,这个链接有问题http://*.com/questions/1757303/parsing-json-dates-on-iphone的实现,但仍然感谢格式的解释。 –

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

然而,幸运的是,我们可以通过修改和添加方法到JSONModel几个步骤来实现此目标。

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

  2. 创建一个名为JSONValueTransformer + NSDate.m.H文件,以及(你可以将其重命名)的文件夹JSONModelTransformations文件。

  3. 将此代码添加到您的新创建的.M文件,不要忘记在.H文件写入接口(I拟添加方法JSONValueTransformer.m文件,但分辨出来,我决定创建新的.m和.h文件)。

    (NSDate的)NSDateFromNSString:(的NSString)字符串{

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

    }从@jasongregori在Parsing JSON dates on IPhone到新创建的.M文件提供

  4. Add方法。

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