我有一個源日期字符串如何將JSON日期反序列化到objective-c中的NSDate?
/日期(1455895287677-0500)/
在目標c。我需要將其轉換爲格式,如「2015-01-01 HH:MM:SS」
如何將它轉換爲Date或NSDate?
我正在使用JSONModel,但它似乎不工作。
我有一個源日期字符串如何將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://stackoverflow.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