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

jpfvwuh4  于 2023-03-20  发布在  其他
关注(0)|答案(2)|浏览(102)

我有源日期字符串
/日期(1455895287677-0500)/
在目标c中。我需要将其转换为类似“2015-01-01 HH:MM:SS”的格式
如何将其转换为Date或NSDate?
我正在使用JSONModel,但它似乎不工作。

jutyujz0

jutyujz01#

嗯,这是一个非标准的日期格式。看起来像1970年以来的毫秒,加上时区。你不需要把它转换成类似“2015-01-01 HH:MM:SS”的格式,你需要一个NSDate。
获取字符串,检查它是否以/Date开头(并以结尾)/并删除这些,检查中间是否有+或-,拆分为+或-之前的部分和+或-开头的部分,对第一部分调用doubleValue并除以1000(这样就有了1970年以来的秒),调用integerValue作为第二部分,这样就得到了小时和分钟,但都是十进制格式。取该整数值,除以100得到小时,从数字中减去小时乘以100,剩下的是分钟。将小时 * 3600和分钟 * 60加到时间中。然后是[NSDate dateWithTimeIntervalSince 1970]。
显然,做一些测试,记录是否有任何你没有预料到的事情,并确保你处理它。

mklgxw1f

mklgxw1f2#

正如我在问题中提到的,我最初尝试使用JSONModel来反序列化日期字符串,如“/Date(1455895287677-0500)/”,但失败了,原因是JSONModel不支持NSDate。
不过,幸运的是,我们可以通过修改和向JSONModel添加方法,通过几个步骤来实现这个目标。
1.如果使用JSONModel(https://github.com/icanzilb/JSONModel)反序列化JSON字符串,请将**[NSDate类]添加到JSONModel.m中的allowedJSONTypes**。
1.在文件夹JSONModelTransformations中创建名为JSONValueTransformer+NSDate.m的文件以及**.h文件(您可以重命名它们)。
1.将此代码添加到新创建的
.m文件中,并且不要忘记在.h**文件中写入接口(我计划将这些方法添加到JSONValueTransformer.m文件中,但是为了区分它们,我决定创建新的.m和.h文件)。

- (NSDate *) NSDateFromNSString:(NSString*)string {
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:APIDateFormat];
    return [formatter dateFromString:string]; 
}

1.将Parsing JSON dates on IPhone中@jasongregori提供的方法添加到新创建的**.m文件中。
1.* * 步骤3
中的方法将处理类似于“2013-08- 26 T15:23:37.832Z”的日期格式。如果日期格式类似于/Date(****-)/,则必须调用步骤4**中的方法。

相关问题