2010-10-06 10 views
8

Nella mia app per iPhone, sto cercando di ottenere EEE MMM da una stringa di data ricevuta da un servizio web.NSDateFormatter restituisce una data di un giorno

Per tutte le date in cui il tempo è < 07:00, NSDateFormatter restituisce una data di disattivazione di 1 giorno. Ad esempio: Data nel formato: 2010-11-17T05: 00: 00, formattato risultato Data: mar nov 16

Ecco il frammento di codice: NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat: @"EEE MMM dd"];

NSDate *dateToFormat = [NSDate dateWithNaturalLanguageString:dateStringToFormat locale:[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]];

NSString *formattedDateString = [dateFormat stringFromDate:dateToFormat]; [dateFormat release];

Quale potrebbe essere il problema?

+0

Dove vivi e quale fuso orario utilizza il servizio web? – Yuji

risposta

10

Probabilmente ha qualcosa a che fare con i fusi orari. Probabilmente è necessario impostare un valore appropriato per la proprietà timeZone dell'oggetto NSDateFormatter.

+0

Hmm, quindi ho impostato la proprietà del fuso orario come localeTimeZone. Ma il risultato è sempre lo stesso. Funziona quando il tempo è più di 7am. Ma qualsiasi cosa prima, fa sì che la data torni indietro di un giorno. – Mansi

+4

Questa era la correzione: [dateFormat setTimeZone: [NSTimeZone timeZoneWithAbbreviation: @ "GMT"]]; – Mansi

2

Ho avuto lo stesso problema ma solo dopo l'aggiornamento a iOS4. Il mio formattatore è come questo:

[aDateFormatter setDateFormat: @ "yyyy-MM-dd hh: mm: ss z"];

e le mie date come questo:

2009-10-27 7:30:12 -0700

sono riuscito a risolvere il problema semplicemente spostando il set modalità Selezione data prima del applicando la data massima/minima/selezionata al selettore di date. Nel mio caso:

aDatePicker.datePickerMode = UIDatePickerModeDate;

Problemi correlati