Cómo saber qué zona horaria establecer para un NSDateFormatter al convertir desde un NSDate

Tengo una function que convierte un NSString en RFC3339 a NSDate utilizando un NSDateFormatter, pero no sé cómo tener en count la zona horaria que hace lo contrario.

La parte relevante de la conversión de cadena a NSDate es:

// The result of a call to systemTimeZone is cached by the app automatically, if the user changes it that change isn't // reflected unless resetSystemTimeZone is called to clear the cache. [NSTimeZone resetSystemTimeZone]; NSLocale *enUSPOSIXLocale; enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; [sRFC3339DateFormatter setLocale:enUSPOSIXLocale]; if ([fromString hasSuffix:@"Z"] || [fromString hasSuffix:@"z"]) { [sRFC3339DateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; } else { [sRFC3339DateFormatter setTimeZone:[NSTimeZone systemTimeZone]]; } [sRFC3339DateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"]; 

Mi pregunta es, al convertir en la otra dirección desde un NSDate a un NSString, ¿cómo sé con qué llamar a setTimeZone? Cuando se pasa de string a NSDate, se observa el absense / presense de Z. Pero si tengo un NSDate, ¿cómo sé a qué zona horaria debo configurar el formateador?

Su NSDate se almacena como zona horaria UTC / GMT. Entonces, cuando lo convierte a una cadena, selecciona la zona horaria en la que desea que se muestre la cadena. No hay una respuesta "correcta". Es lo que quieras mostrar.