2009-04-23 9 views
19

ho il seguente codice:descrizione Stringa di NSDate

[ [NSDate date] descriptionWithLocale: @"yyyy-MM-dd" ] 

voglio che restituire una data nel seguente formato: "2009-04-23"

ma restituisce: Giovedi mese di aprile 23, 2009 11:27:03 PM GMT + 03: 00

Cosa sto facendo di sbagliato?

Grazie in anticipo.

risposta

32

Si sta utilizzando il metodo sbagliato. Invece di cercare descriptionWithCalendarFormat:timeZone:locale:

[[NSDate date] descriptionWithCalendarFormat:@"%Y-%m-%d" 
            timezone:nil 
             locale:nil]; 

Si noti inoltre che il metodo si aspetta un formato diverso da quello nella sua interrogazione. La documentazione completa può essere trovata here.

EDIT: Anche se Mike ha notato, dovresti utilizzare lo standard NSDateFormatter. Ci sono alcuni problemi con descriptionWithCalendarFormat:timezone:locale: che Apple menziona nella documentazione.

+2

Smisurato .... –

+4

@NicHubbard: questo metodo non è né deprecato né ammortizzato. Almeno dal 10.6 (l'attuale versione di Mac OS X). –

+4

Ma sembra essere per iOS. È tempo di essere prolissi e usa NSDateFormatter. – eddieroger

1

Se non si dispone di NSDate -descriptionWithCalendarFormat:timeZone:locale: disponibile (non credo iPhone/Cocoa Touch include questo) potrebbe essere necessario utilizzare strftime e la scimmia in giro con alcune stringhe di C-stile. È possibile ottenere il timestamp UNIX da un NSDate utilizzando NSDate -timeIntervalSince1970.

+0

Suppongo che questo sia il cacao standard come descrizioneWithLocale non esiste neanche su iPhone. –

+0

Buon punto. Ho visto un'altra domanda simile che riguardava l'iphone, quindi penso che riporterò questa risposta lì. – pix0r

10

Si noti inoltre che per la maggior parte dei casi, NSDateFormatter deve essere preferito per la sua flessibilità.

C'è anche un significativo vantaggio in termini di prestazioni derivante dal riutilizzo dei formattatori di data in molte app.

+0

Quale flessibilità? –

+1

Mi stai prendendo in giro? Guarda i documenti per vedere come è configurabile! –

+1

Non scherzo. Mi sto solo chiedendo quale delle molte e varie flessibilità che NSDateFormatter ha effettivamente influisce sulla domanda. –

91
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd"]; 
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]]; 
[dateFormatter release]; // delete this line if your project uses ARC 
NSLog(@"%@",dateString); 
+8

Per motivi di locale, non è necessario impostare i formati di data e ora in modo esplicito. Utilizzare invece gli stili compatibili con le impostazioni locali: '[dataFormatter setDateStyle: NSDateFormatterMediumStyle]; [dateFormatter setTimeStyle: NSDateFormatterMediumStyle]; ' –

+1

@GrahamPerks che non è sempre vero. Cosa succede se, ad esempio, stai generando una data da inviare a una API Web che dovrà essere analizzata dal server? –

+1

Abbastanza giusto. Sottolineo di non copiare ciecamente il codice nella risposta; se la stringa verrà vista da un utente, ha bisogno di una modifica. –