2009-07-04 13 views
20

Ho un tempo nel fuso orario EST, è fatto usando la funzione NOW() sul server mysql. Poiché il mio server si trova in EST, il tempo memorizzato è in EST. Quando lo recupero dalla mia app su iPhone, ho bisogno di visualizzarlo nel fuso orario corretto dell'utente. Come lo faccio?Come convertire l'ora nel fuso orario del dispositivo iPhone?

risposta

3

Penso che dipenda da cosa intendi per EST - se intendi East Coast US, quindi in generale, che è 5 ore indietro rispetto a UTC (ma non conta per l'ora legale), che dovrebbe darti 04:00 EST. Cerca di evitare l'uso di abbreviazioni laddove possibile, poiché sono ambigue, ad es. EST è l'abbreviazione di America/Detroit e Australia/Sydney. Usando NSTimeZone initWithName darà risultati più precisi.

Il Chronos Time Zone Repository fornisce un database timezone XML ben leggibile che aiuta davvero a capire come funzionano i fusi orari (è tutto piuttosto confuso e mutevole).

3

// È possibile utilizzare la funzione di seguito per convertire data per un fuso orario che si desidera

+ (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 = s-p; 
    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]); 
}]; 
Problemi correlati