2011-08-16 67 views
8

獲取日期我向數據庫詢問對象的日期。我收到一個字符串:2011-08-16T19:03:21.000Z(這裏是另一個:2011-08-12T02:13:16.000Z);從字符串'2011-08-16T19:03:21.000Z'

編輯:這是另外一個,我做了2011年8月16日,在下午12點51用於測試目的:2011-08-16T19:51:24.000Z

我想這個日期轉換爲另一種格式進行顯示。這種格式可能會在將來發生變化,所以我不想直接進行字符串操作。最好的辦法是把它變成一個NSDate,然後回到格式正確的字符串。但是,在我的生活中,我無法將修補字符串轉換爲NSDate。

- (NSString *)makeDateStringReadable:(NSString *)dateString { 
    NSLog(@"The String: %@", dateString); 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateFormat:@"yyyy-MM-ddTHH:mm:ss.zzzz"]; 
    NSDate *theDate = [formatter dateFromString:dateString]; 
    NSLog(@"The Date: %@", theDate); 
    [formatter setDateFormat:@"yyyy-MM-dd"]; 
    NSString *finalString = [formatter stringFromDate:theDate]; 
    [formatter release]; 
    return finalString; 
} 

原始字符串被傳入並被註銷,但「The Date:」日誌始終顯示爲空。我假設格式不正確......但我無法弄清楚它是正確的。我也嘗試使用this作爲參考。

我可以得到DateFormatter專家的幫助嗎?非常感謝!

+0

你可以在這裏找到一個工作實現:http://devbytom.blogspot.fr/2011/04/rfc-3339-dates-and-ios-parsing.html – Martin

+0

工作格式:'[formatter setDateFormat:@「yyyy -MM-dd'T'HH:MM:ss.SSS'Z '原「];' 從下面複製評論。 –

回答

12

一個問題(但可能不是問題)是zzzz不是000Z的正確規範。 RFC 3339時間戳的結尾不是四個字符的時區規範,而是小數秒加上文字「Z」。因此請嘗試將zzzz更改爲SSS'Z'

+0

感謝您的快速響應。我試過「[formatter setDateFormat:@」yyyy-MM-ddTHH:mm:ss.SSS'Z'「];」,但它仍然爲空。 –

+6

在玩了更多的東西(並且有一位朋友幫忙)之後,我找到了它:'[formatter setDateFormat:@「yyyy-MM-dd'T'HH:mm:ss.SSS'Z'」]; 「謝謝! –

+2

NSDateFormatter是我在iOS(和Mac)上遇到的最慢的事情之一 - 那就是不應該慢的事情。他們的製作非常昂貴。請記住,如果你製作了10,000個。您可以創建一個,然後保留它以執行整個程序。 (單身)。 –