2016-03-08 31 views
0

我有一個源日期字符串如何將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

回答

1

嗯,這是日期的非標準格式。看起來像1970年以來的毫秒,加上時區。你不需要將它轉換成「2015-01-01 HH:MM:SS」之類的東西,你想要一個NSDate。

取出字符串,檢查它是以/ Date開始(並以/結尾)並刪除它們,檢查是否存在+或 - 之間,分割爲+或 - 之前的部分和調用第一部分的doubleValue併除以1000(所以你有1970年以來的秒數),爲第二部分調用integerValue,所以你得到小時和分鐘,但是以十進制格式。取整數值,除以100得到小時數,從數中減去小時數乘以100,剩下的就是分鐘數。添加小時* 3600和分鐘* 60的時間。然後[NSDate dateWithTimeIntervalSince1970]。

顯然做了一些測試,記錄是否有任何你沒有想到的事情,並確保你處理它。

+0

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

+0

其實,這個鏈接有問題http://stackoverflow.com/questions/1757303/parsing-json-dates-on-iphone的實現,但仍然感謝格式的解釋。 –

0

正如我在我的問題中提到的,我最初嘗試使用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中的方法