2011-08-16 8 views
8

Chiedo a un database la data di un oggetto. Ricevo una stringa in questo modo: 2011-08-16T19:03:21.000Z (Eccone un'altra: 2011-08-12T02:13:16.000Z);Ottieni data da String '2011-08-16T19: 03: 21.000Z'

Edit: Ecco un altro che ho fatto 16 agosto 2011, alle 12:51 a scopo di test: 2011-08-16T19:51:24.000Z

voglio convertire questa data in un altro formato per la visualizzazione. Questo formato potrebbe cambiare in futuro, quindi non voglio fare una manipolazione diretta delle stringhe. La cosa migliore da fare è trasformarlo in un NSDate e quindi tornare alla stringa correttamente formattata. Tuttavia, non posso, per la vita di me, ottenere la stringa darn in un 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; 
} 

La stringa originale viene passato, ed è disconnesso, ma il "The Date:" log mostra sempre nullo. Suppongo che il formato non sia corretto ... ma non riesco a farlo correggere. Ho provato a usare anche this come riferimento.

È possibile ottenere l'aiuto di un guru di DateFormatter? Grazie mille!

+0

È possibile trovare un'implementazione funzionante qui: http://devbytom.blogspot.fr/2011/04/rfc-3339-dates-and-ios-parsing.html – Martin

+0

Formato di lavoro: '[formatter setDateFormat: @ "yyyy -MM-dd'T'HH: mm: ss.SSS'Z '"];' Copiato dal seguente commento. –

risposta

12

Un problema (ma probabilmente non il problema) è che quello zzzz non è la specifica giusta per 000Z. La fine del timestamp RFC 3339 non è una specifica del fuso orario di quattro caratteri, ma dei secondi frazionari più una "Z" letterale. Quindi prova a cambiare zzzz a SSS'Z'.

+0

Grazie per la tua rapida risposta. Ho provato "[formatter setDateFormat: @" yyyy-MM-ddTHH: mm: ss.SSS'Z '"];", ma è ancora nullo. –

+6

Dopo averci giocato un po 'di più (e avendo un amico di aiuto), l'ho fatto funzionare con:' [formatter setDateFormat: @ "yyyy-MM-dd'T'HH: mm: ss.SSS'Z '"]; ' Grazie! –

+2

NSDateFormatter è una delle cose più lente-che-shoud-not-be-slow che ho incontrato su iOS (e Mac). Sono davvero costosi da fare. Tienilo a mente se ne stai facendo 10.000. Puoi crearne uno, quindi tenerlo per l'intera esecuzione del programma. (Un singleton). –