如何将JSON日期反序列化到objective-c中的NSDate?
我有一个源日期字符串如何将JSON日期反序列化到objective-c中的NSDate?
/日期(1455895287677-0500)/
在目标c。我需要将其转换为格式,如“2015-01-01 HH:MM:SS”
如何将它转换为Date或NSDate?
我正在使用JSONModel,但它似乎不工作。
嗯,这是日期的非标准格式。看起来像1970年以来的毫秒,加上时区。你不需要将它转换成“2015-01-01 HH:MM:SS”之类的东西,你想要一个NSDate。
取出字符串,检查它是以/ Date开始(并以/结尾)并删除它们,检查是否存在+或 - 之间,分割为+或 - 之前的部分和调用第一部分的doubleValue并除以1000(所以你有1970年以来的秒数),为第二部分调用integerValue,所以你得到小时和分钟,但是以十进制格式。取整数值,除以100得到小时数,从数中减去小时数乘以100,剩下的就是分钟数。添加小时* 3600和分钟* 60的时间。然后[NSDate dateWithTimeIntervalSince1970]。
显然做了一些测试,记录是否有任何你没有想到的事情,并确保你处理它。
谢谢! @ gnasher729它的工作原理。 –
其实,这个链接有问题http://*.com/questions/1757303/parsing-json-dates-on-iphone的实现,但仍然感谢格式的解释。 –
正如我在我的问题中提到的,我最初尝试使用JSONModel反序列化日期字符串,如“/ Date(1455895287677-0500)/”但它失败。原因是JSONModel不支持NSDate。
然而,幸运的是,我们可以通过修改和添加方法到JSONModel几个步骤来实现此目标。
添加[NSDate的类]到allowedJSONTypes在JSONModel.m如果你使用JSONModel(https://github.com/icanzilb/JSONModel),以反序列化JSON字符串。
创建一个名为JSONValueTransformer + NSDate.m和.H文件,以及(你可以将其重命名)的文件夹JSONModelTransformations文件。
-
将此代码添加到您的新创建的.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文件提供
Add方法。
步骤3中的方法将处理如“2013-08-26T15:23:37.832Z”的日期格式。如果日期格式如此/日期(*********** - ****)/,则必须拨打步骤4中的方法。
数字代表什么?对于UNIX时间戳太大了 – vadian
@vadian:将数字除以60 * 60 * 24 * 365.25即可得出约46,000。我们是1970年以前的46年。显然这是自毫秒以来的时间 – gnasher729
这是有道理的:-) – vadian