iPhone NSDateFormatter Conversione del fuso orario

Sto cercando di creare un formattatore che convertirà il formato della data mostrato in un object NSDate:

NSString *dateStr = @"2010-06-21T19:00:00-05:00"; NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"]; NSDate *date = [dateFormat dateFromString:dateStr]; 

Il problema è il fuso orario -05: 00, che non viene analizzato correttamente con il formato sopra. Eventuali suggerimenti?

Onestamente, dovrai solo modificare i dati di origine (rimuovendo i due punti) prima di eseguirli attraverso il formattatore. La stringa di data originale non è standard e nessuna delle stringhe di formato fuso orario funzionerà correttamente su di essa.

Puoi vedere gli input validi su unicode.org .

ZZZ ad esempio “-0500”

ZZZZ es. “GMT-05: 00”

Niente per “-05: 00”

Per elaborare il fuso orario con i due punti, è sufficiente utilizzare 5 ‘Z’. Questo è un formato di data piuttosto comune, il formato ISO-8601. Funzionerà solo su iOS 6.x +

 -(NSDate *) dateFromString:(NSString *)string { NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"]; return [formatter dateFromString:string]; } 

Forse mi mancava qualcosa, ma ZZ funzionato per me. Ero solito:

 @"yyyy-MM-dd'T'HH:mm:ss.SSSZZ" 

per

 2014-02-27T08:00:00.000+04:00 

Questo è il formato orario predefinito che ho ricevuto da un backend Sinatra ActiveRecord. Ecco la mia soluzione.

 -(NSDate *) dateFromString:(NSString *)string{ NSMutableString * correctedDateString = [[NSMutableString alloc] initWithString:string]; [correctedDateString deleteCharactersInRange: NSMakeRange(22, 1)]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"]; return [formatter dateFromString:correctedDateString]; } 

Questa è l’unica soluzione che ha funzionato per me:

 [dateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"]; 

5 ZZZZZ – ecco una categoria che ho scritto con un campione di GMT in BST

https://github.com/clearbrian/NSDateFormatter_ISO_8601