mysql - reloj - ¿Cómo convertir el tiempo a la zona horaria del dispositivo iPhone?
porque se desconfigura la hora de mi iphone (2)
Tengo un tiempo en la zona horaria EST, se hace usando la función NOW () en el servidor mysql. Como mi servidor se encuentra en EST, el tiempo almacenado está en EST. Cuando lo recupero de mi aplicación en el iPhone, debo mostrarlo en el huso horario correcto del usuario. ¿Cómo puedo hacer eso?
// Puede usar la función siguiente para convertir la fecha a una zona horaria que desee
+ (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]);
}];
Creo que depende de lo que quiere decir con EST: si se refiere a la Costa Este de los EE. UU., En general, eso significa 5 horas más que UTC (pero no corresponde al horario de verano), lo que debería darle 04:00 EST. Intente evitar el uso de abreviaturas cuando sea posible, ya que son ambiguas, por ejemplo, EST es la abreviatura de América / Detroit y Australia / Sydney. Usar NSTimeZone initWithName dará resultados más precisos.
Chronos Time Zone Repository proporciona una base de datos de zona horaria XML agradablemente legible que realmente ayuda a comprender cómo funcionan las zonas horarias (todo es bastante desordenado y variable).