2009-07-04 6 views

Respuesta

3

Creo que depende de lo que quiere decir con EST - si se refiere a la costa este de EE. UU., En general, eso es 5 horas menos que UTC (pero no corresponde al horario de verano), que debería proporcionarle 04:00 EST. Intente evitar el uso de abreviaturas cuando sea posible, ya que son ambiguas, p. EST es la abreviatura de América/Detroit y Australia/Sydney. Usar NSTimeZone initWithName dará resultados más precisos.

El Chronos Time Zone Repository proporciona una base de datos de zona horaria XML agradablemente legible que realmente ayuda a entender cómo funcionan las zonas horarias (todo es bastante desordenado y modificable).

3

// Usted puede utilizar la función de abajo para convertir la fecha a una zona horaria que desea

+ (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]); 
}]; 
Cuestiones relacionadas