2012-01-09 13 views
6

Ho un metodo,NSDateFormatter data di ritorno non corretta dalla stringa

+ (NSDate *) convertToDateFrom:(NSString *) dateString 
{ 
    if (dateString == nil || [dateString isEqual:@""]) return nil; //return nil if dateString is empty 
    NSDateFormatter *df = [[NSDateFormatter alloc] init]; 
     [df setDateFormat:@"EEEE, dd MMMM yyyy HH:mm"]; 

    NSDate *date = [df dateFromString:dateString]; 

    return date; 
} 

Quando passo,

@"Monday, 21 November 2011 17:01" //Passed string 

Si restituisce una data sbagliata,

2011-11-21 23:14:00 +0000 // Output 

Sono non sono sicuro se sto usando questi flag correttamente o NSDateFormatt er non sta convertendo correttamente la mia stringa fino ad oggi.

Sto facendo qualcosa di sbagliato?

Grazie

+1

Beh, prima di tutto è il ritorno la data giusta, basta il momento sbagliato Se si sta veramente dando da mangiare alle 17:01 e si ritorna alle 23:14, probabilmente si sta guardando all'oggetto NSDate sbagliato, poiché non esiste un'impostazione ragionevole per il fuso orario che produrrà quell'offset. –

risposta

12

Il +0000 al termine della data indica GMT. Tutte le date sono memorizzate rispetto al GMT; quando si converte una data in una stringa o viceversa utilizzando un formattatore di date, viene incluso l'offset del fuso orario. È possibile utilizzare il metodo -setTimeZone: di NSDateFormatter per impostare il fuso orario utilizzato.

In breve, non stai facendo nulla di sbagliato nel tuo codice. Utilizzare [df stringFromDate:date]; per verificare che la data sia corretta. (È inoltre possibile utilizzare NSDate's -descriptionWithCalendarFormat:timeZone:locale:.)

+0

Sembra un bug quando ho chiesto a descriptionWithLocale che mi divida risultato corretto, divertente! – doNotCheckMyBlog

+1

"description" (che si ottiene per impostazione predefinita se si registra l'oggetto NSDate come un oggetto) mostra l'ora UTC. –

+0

Non riesco a ottenere l'ora esatta, ma la data è corretta.Posso usare questa data per EkEvent e memorizzare l'evento sul calendario predefinito in iPhone.In quel caso il tempo non corrisponde.Per favore aiutami ... – IKKA

-1

Provare a impostare il fuso orario e le impostazioni internazionali.

[df setLocale:[NSLocale currentLocale]]; 
[df setTimeZone:[NSTimeZone systemTimeZone]]; 
+0

L'ho provato ma continua a restituire "2011-11-21 23:14:00 +0000" – doNotCheckMyBlog

+2

Se posso suggerire qualche lettura chiara: http: //developer.apple.com/library/mac/#documentation/Cocoa/ Concettuale/Date e Tempi/Date e Tempi.html # // Apple_ref/doc/uid/10000039i –

+0

Sembra un errore quando ho chiesto a descriptionWithLocale di darmi un risultato corretto, divertente! risultato risultato era diverso tra descrizione e descrizioneWitLocale ... una differenza di un'ora :( – doNotCheckMyBlog

0

provare a utilizzare

df stringFromDate:date 

In seguito ha lavorato sulla mia,

NSLog(@"Date for locale %@: %@", 
     [[dateFormatter locale] localeIdentifier], [df stringFromDate:date]); 

mi ha dato in uscita come:

Date for locale en_US: Wednesday, 26 June 2013 15:50 
Problemi correlati