Estoy en Swift 4.2 . Estoy luchando tratando de obtener el tiempo de compensación entre UTC y el de mi iPhone.
tengo este codigo
extension TimeZone { func offsetFromGMT() -> String { let localTimeZoneFormatter = DateFormatter() localTimeZoneFormatter.timeZone = self localTimeZoneFormatter.dateFormat = "Z" return localTimeZoneFormatter.string(from: Date()) } } func getCurrentTimeZone() -> String{ return String (TimeZone.current.identifier) } var tzOffset = "" let currentTimeZone = getCurrentTimeZone() TimeZone.knownTimeZoneIdentifiers.forEach({ timeZoneIdentifier in if let timezone = TimeZone(identifier: timeZoneIdentifier) { //print("\(timezone.identifier) \(timezone.offsetFromGMT())") if(timezone.identifier == currentTimeZone){ tzOffset = timezone.offsetFromGMT() } } })Si lo hago
print(tzOffset)Obtuve
-0500 ¿Debería ser -5 ya que mi zona horaria actual es America/Montreal ?
¿Puede alguien por favor darme una pista?
Puede obtener la zona horaria actual, obtener la cantidad de segundos de GMT y dividirla por 3600.
TimeZone.current.secondsFromGMT() / 3600 // -3 hs America/Sao_Paulo (current) BrazilSi necesita más precisión, como fracción de hora, simplemente conviértalo al doble antes de dividirlo.
debería ser -0500 .
La razón por la que tiene 4 dígitos en lugar de uno es porque está en un formato de 24 horas, y algunas zonas horarias se miden en una distancia de media hora desde UTC.