¿Cómo puedo convertir una abreviatura de zona horaria offset al identificador de zona horaria oficial?

Cuando llamo al método de abreviatura de NSTimeZone, devuelve GMT-07:00 . Luego, cuando uso este valor para search el nombre de la zona horaria o ( identificador de zona horaria ), devuelve nil .

Necesito recuperar el identificador de zona horaria oficial, por ejemplo, America/Los_Angeles . Por lo tanto, ¿cómo puedo convertir una abreviatura de desplazamiento de zona horaria (por ejemplo, GMT-07:00 ) al identificador de zona horaria oficial?

Aquí está mi código:

 NSTimeZone* localTimeZone = [NSTimeZone localTimeZone]; NSString* localAbbreviation = [localTimeZone abbreviation]; NSDictionary* abbreviationDictionary = [NSTimeZone abbreviationDictionary]; NSString* timeZoneID = [abbreviationDictionary objectForKey:localAbbreviation]; //should return 'America/Los_Angeles' if the abbreviation is 'PDT' 

(Reescribí mi respuesta, entendí mal la pregunta anterior).

Aquí hay un ejemplo de cómo convertir una zona horaria de la abreviatura:

 NSTimeZone* localTimeZone = [NSTimeZone localTimeZone]; NSString* localAbbreviation = [localTimeZone abbreviation]; 

Para transformarlo de la Abreviatura local, es solo cuestión de volver a crear la zona horaria:

 NSTimeZone* timeZoneFromAbbreviation = [NStimeZone timeZoneWithAbbreviation:abbreviation]; NSString* timeZoneIdentifier = timeZoneAbbreviation.name; NSLog(@"Identifier: %@", timeZoneIdentifier); // Outputs America/Santiago for me. 

¿Estás seguro de que la abreviatura está regresando "GMT-07: 00"? El mío devuelve "CLT", no una compensación GMT.

Espero que esto sea útil Editar El + debe estar allí para mostrarse exactamente como abreviatura normal

  -(NSString*)getTimeZoneStringForAbbriviation:(NSString*)abbr{ NSTimeZone *atimezone=[NSTimeZone timeZoneWithAbbreviation:abbr]; int minutes = (atimezone.secondsFromGMT / 60) % 60; int hours = atimezone.secondsFromGMT / 3600; NSString *aStrOffset=[NSString stringWithFormat:@"%02d:%02d",hours, minutes]; return [NSString stringWithFormat:@"GMT+%@",aStrOffset]; }