Como converter o tempo para o fuso horário do dispositivo iPhone?

Eu tenho um tempo no fuso horário EST, é feito usando a function NOW () no servidor mysql. Como o meu servidor está localizado em EST, o tempo armazenado é em EST. Quando eu o recupero do meu aplicativo no iPhone, preciso exibi-lo no fuso horário correto do usuário. Como faço isso?

Eu acho que depende do que você entende por EST – se você quer dizer Costa Leste dos EUA, então, em geral, isso é 5 horas atrás de UTC (mas não contabilizando o horário de verão), o que deve dar 04:00 EST. Tente evitar o uso de abreviações sempre que possível, pois elas são ambíguas, por exemplo, EST é a abreviação de America / Detroit e Australia / Sydney. Usando o NSTimeZone initWithName fornecerá resultados mais precisos.

O Repositório de Fuso Horário Chronos oferece um database de fuso horário XML bem legível que realmente ajuda a entender como funcionam os fusos horários (tudo é bastante confuso e mutável).

// Você pode usar a function abaixo para converter a data em um fuso horário que você deseja

+ (NSDate *) convertDate:(NSDate *) date toTimeZone:(NSString *) timeZoneAbbreviation { NSTimeZone *systemZone = [NSTimeZone systemTimeZone]; NSTimeZone *zoneUTC = [NSTimeZone timeZoneWithAbbreviation:timeZoneAbbreviation]; NSTimeInterval s = [zoneUTC secondsFromGMT]; NSTimeZone *myZone = [NSTimeZone timeZoneWithAbbreviation:[systemZone abbreviationForDate:date]]; NSTimeInterval p = [myZone secondsFromGMT]; NSTimeInterval i = sp; NSDate *d = [NSDate dateWithTimeInterval:i sinceDate:date]; return d; } //Test case **note** cgUtil is the class this method is written thus change it accordingly __block NSDate *now = [NSDate date]; NSLog(@"Current time:%@", now); [[[NSTimeZone abbreviationDictionary] allKeys] enumerateObjectsUsingBlock:^(NSString * abb, NSUInteger idx, BOOL *stop) { NSLog(@"Time zone abb:%@:Time:%@",abb,[cgUtil convertDate:now toTimeZone:abb]); }];