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

如何在objective-c中将JSON date反序列化为NSDate?,objective-c,json,date,datetime,jsonmodel,Objective C,Json,Date,Datetime,Jsonmodel,我有一个源日期字符串 /日期(1455895287677-0500) 在目标c中。我需要将其转换为类似“2015-01-01 HH:MM:SS”的格式 如何将其转换为日期或NSDate 我正在使用JSONModel,但它似乎不起作用。嗯,它是日期的非标准格式。看起来是1970年以来的毫秒加上时区。您不需要将其转换为“2015-01-01 HH:MM:SS”之类的内容,您需要一个NSDate 取字符串,检查它是否以/Date开头(并以/结尾),然后删除它们,检查它们之间是否有+或-,拆分为+或-之

我有一个源日期字符串

/日期(1455895287677-0500)

在目标c中。我需要将其转换为类似“2015-01-01 HH:MM:SS”的格式

如何将其转换为日期或NSDate


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

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

取字符串,检查它是否以/Date开头(并以/结尾),然后删除它们,检查它们之间是否有+或-,拆分为+或-之前的部分,以及以+或-开头的部分,第一部分调用doubleValue,然后除以1000(因此自1970年以来有秒),第二部分调用integerValue,所以你可以得到小时和分钟,但是是十进制的。取这个整数值,除以100得到小时,再减去小时乘以100,剩下的是分钟。将时间加上小时*3600和分钟*60。然后[NSDate DATE WITH TIME INTERVALICENS1970]


显然,要做一些测试,记录下你没有预料到的事情,并确保你能处理好

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

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

  • 如果使用JSONModel()反序列化JSON字符串,请将[NSDate class]添加到JSONModel.m中的allowedJSONTypes

  • 在文件夹JSONValueTransformer中创建名为JSONValueTransformer+NSDate.m.h的文件(您可以重命名它们)

  • 将此代码添加到新创建的.m文件中,并且不要忘记在.h文件中写入接口(我计划将这些方法添加到JSONValueTransformer.m文件中,但为了区别,我决定创建新的.m和.h文件)

    (NSDate)NSDATEFORMSSTRING:(NSString)字符串{

    }

  • 将@jasongregori在中提供的方法添加到新创建的.m文件中

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


  • 这个数字代表什么?对于UNIX时间戳,它太large@vadian:取这个数字,除以60*60*24*365.25,得到大约46000。我们已经超过1970年46岁了。很明显,这是自大纪元以来的毫秒时间,这是有意义的:-)事实上,这个链接有这个问题的实现,但仍然感谢对格式的解释。
            NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
            [formatter setDateFormat:APIDateFormat];
            return [formatter dateFromString:string];