zona verano problema porque horario horaria hora fecha desconfigura configurar como cambio cambiar ios xcode swift macos nstimezone

ios - verano - ¿Cómo obtener la zona horaria de un usuario?



porque se desconfigura la hora de mi iphone (5)

¿Alguien sabe de una manera de obtener una zona horaria de los usuarios en Swift?

Estoy obteniendo un momento específico de que algo está en la televisión fuera de una base de datos y luego necesito restar / sumar desde donde están ubicados para mostrarles la hora correcta en que está encendido.


Puede usar el siguiente código para obtener la zona horaria actual

func getCurrentTimeZone() -> String{ return TimeZone.current.identifier } let currentTimeZone = getCurrentTimeZone() print(currentTimeZone)


editar / actualizar:

Xcode 8 o posterior • Swift 3 o posterior

var secondsFromGMT: Int { return TimeZone.current.secondsFromGMT() } secondsFromGMT // -7200

si necesitas la abreviatura:

var localTimeZoneAbbreviation: String { return TimeZone.current.abbreviation() ?? "" } localTimeZoneAbbreviation // "GMT-2"

si necesita el identificador de zona horaria:

var localTimeZoneIdentifier: String { return TimeZone.current.identifier } localTimeZoneIdentifier // "America/Sao_Paulo"

Para conocer todas las abreviaturas de zonas horarias disponibles:

var timeZoneAbbreviations: [String:String] { return TimeZone.abbreviationDictionary } timeZoneAbbreviations // ["CEST": "Europe/Paris", "WEST": "Europe/Lisbon", "CDT": "America/Chicago", "EET": "Europe/Istanbul", "BRST": "America/Sao_Paulo", "EEST": "Europe/Istanbul", "CET": "Europe/Paris", "MSD": "Europe/Moscow", "MST": "America/Denver", "KST": "Asia/Seoul", "PET": "America/Lima", "NZDT": "Pacific/Auckland", "CLT": "America/Santiago", "HST": "Pacific/Honolulu", "MDT": "America/Denver", "NZST": "Pacific/Auckland", "COT": "America/Bogota", "CST": "America/Chicago", "SGT": "Asia/Singapore", "CAT": "Africa/Harare", "BRT": "America/Sao_Paulo", "WET": "Europe/Lisbon", "IST": "Asia/Calcutta", "HKT": "Asia/Hong_Kong", "GST": "Asia/Dubai", "EDT": "America/New_York", "WIT": "Asia/Jakarta", "UTC": "UTC", "JST": "Asia/Tokyo", "IRST": "Asia/Tehran", "PHT": "Asia/Manila", "AKDT": "America/Juneau", "BST": "Europe/London", "PST": "America/Los_Angeles", "ART": "America/Argentina/Buenos_Aires", "PDT": "America/Los_Angeles", "WAT": "Africa/Lagos", "EST": "America/New_York", "BDT": "Asia/Dhaka", "CLST": "America/Santiago", "AKST": "America/Juneau", "ADT": "America/Halifax", "AST": "America/Halifax", "PKT": "Asia/Karachi", "GMT": "GMT", "ICT": "Asia/Bangkok", "MSK": "Europe/Moscow", "EAT": "Africa/Addis_Ababa"]

Para conocer todos los nombres de zonas horarias (identificadores) disponibles:

var timeZoneIdentifiers: [String] { return TimeZone.knownTimeZoneIdentifiers } timeZoneIdentifiers // ["Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers", "Africa/Asmara", "Africa/Bamako", "Africa/Bangui", "Africa/Banjul", "Africa/Bissau", "Africa/Blantyre", "Africa/Brazzaville", "Africa/Bujumbura", "Africa/Cairo", "Africa/Casablanca", "Africa/Ceuta", "Africa/Conakry", "Africa/Dakar", "Africa/Dar_es_Salaam", "Africa/Djibouti", "Africa/Douala", "Africa/El_Aaiun", "Africa/Freetown", "Africa/Gaborone", "Africa/Harare", "Africa/Johannesburg", "Africa/Juba", "Africa/Kampala", "Africa/Khartoum", "Africa/Kigali", "Africa/Kinshasa", "Africa/Lagos", "Africa/Libreville", "Africa/Lome", "Africa/Luanda", "Africa/Lubumbashi", "Africa/Lusaka", "Africa/Malabo", "Africa/Maputo", "Africa/Maseru", "Africa/Mbabane", "Africa/Mogadishu", "Africa/Monrovia", "Africa/Nairobi", "Africa/Ndjamena", "Africa/Niamey", "Africa/Nouakchott", "Africa/Ouagadougou", "Africa/Porto-Novo", "Africa/Sao_Tome", "Africa/Tripoli", "Africa/Tunis", "Africa/Windhoek", "America/Adak", "America/Anchorage", "America/Anguilla", "America/Antigua", "America/Araguaina", "America/Argentina/Buenos_Aires", "America/Argentina/Catamarca", "America/Argentina/Cordoba", "America/Argentina/Jujuy", "America/Argentina/La_Rioja", "America/Argentina/Mendoza", "America/Argentina/Rio_Gallegos", "America/Argentina/Salta", "America/Argentina/San_Juan", "America/Argentina/San_Luis", "America/Argentina/Tucuman", "America/Argentina/Ushuaia", "America/Aruba", "America/Asuncion", "America/Atikokan", "America/Bahia", "America/Bahia_Banderas", "America/Barbados", "America/Belem", "America/Belize", "America/Blanc-Sablon", "America/Boa_Vista", "America/Bogota", …, "Pacific/Marquesas", "Pacific/Midway", "Pacific/Nauru", "Pacific/Niue", "Pacific/Norfolk", "Pacific/Noumea", "Pacific/Pago_Pago", "Pacific/Palau", "Pacific/Pitcairn", "Pacific/Pohnpei", "Pacific/Ponape", "Pacific/Port_Moresby", "Pacific/Rarotonga", "Pacific/Saipan", "Pacific/Tahiti", "Pacific/Tarawa", "Pacific/Tongatapu", "Pacific/Truk", "Pacific/Wake", "Pacific/Wallis"]

Hay otra información que puede necesitar:

var isDaylightSavingTime: Bool { return TimeZone.current.isDaylightSavingTime(for: Date()) } print(isDaylightSavingTime) // true (in effect) var daylightSavingTimeOffset: TimeInterval { return TimeZone.current.daylightSavingTimeOffset() } print(daylightSavingTimeOffset) // 3600 seconds (1 hour - daylight savings time) var nextDaylightSavingTimeTransition: Date? { return TimeZone.current.nextDaylightSavingTimeTransition } // "Feb 18, 2017, 11:00 PM" print(nextDaylightSavingTimeTransition?.description(with: .current) ?? "none") nextDaylightSavingTimeTransition // "Saturday, February 18, 2017 at 11:00:00 PM Brasilia Standard Time/n" var nextDaylightSavingTimeTransitionAfterNext: Date? { guard let nextDaylightSavingTimeTransition = nextDaylightSavingTimeTransition else { return nil } return TimeZone.current.nextDaylightSavingTimeTransition(after: nextDaylightSavingTimeTransition) } nextDaylightSavingTimeTransitionAfterNext // "Oct 15, 2017, 1:00 AM"

TimeZone - Documentación Swift para desarrolladores de Apple


Swift 4, 4.2 y 5

var timeZone : String = String() override func viewDidLoad() { super.viewDidLoad() timeZone = getCurrentTimeZone() print(timeZone) } func getCurrentTimeZone() -> String { let localTimeZoneAbbreviation: Int = TimeZone.current.secondsFromGMT() let items = (localTimeZoneAbbreviation / 3600) return "/(items)" }


Xcode 8.2.1 • Swift 3.0.2

Locale.availableIdentifiers Locale.isoRegionCodes Locale.isoCurrencyCodes Locale.isoLanguageCodes Locale.commonISOCurrencyCodes Locale.current.regionCode // "US" Locale.current.languageCode // "en" Locale.current.currencyCode // "USD" Locale.current.currencySymbol // "$" Locale.current.groupingSeparator // "," Locale.current.decimalSeparator // "." Locale.current.usesMetricSystem // false Locale.windowsLocaleCode(fromIdentifier: "pt_BR") // 1,046 Locale.identifier(fromWindowsLocaleCode: 1046) ?? "" // "pt_BR" Locale.windowsLocaleCode(fromIdentifier: Locale.current.identifier) // 1,033 Note: I am in Brasil but I use "en_US" format with all my devices Locale.windowsLocaleCode(fromIdentifier: "en_US") // 1,033 Locale.identifier(fromWindowsLocaleCode: 1033) ?? "" // "en_US" Locale(identifier: "en_US_POSIX").localizedString(forLanguageCode: "pt") // "Portuguese" Locale(identifier: "en_US_POSIX").localizedString(forRegionCode: "br") // "Brazil" Locale(identifier: "en_US_POSIX").localizedString(forIdentifier: "pt_BR") // "Portuguese (Brazil)" TimeZone.current.localizedName(for: .standard, locale: .current) ?? "" // "Brasilia Standard Time" TimeZone.current.localizedName(for: .shortStandard, locale: .current) ?? "" // "GMT-3 TimeZone.current.localizedName(for: .daylightSaving, locale: .current) ?? "" // "Brasilia Summer Time" TimeZone.current.localizedName(for: .shortDaylightSaving, locale: .current) ?? "" // "GMT-2" TimeZone.current.localizedName(for: .generic, locale: .current) ?? "" // "Brasilia Time" TimeZone.current.localizedName(for: .shortGeneric, locale: .current) ?? "" // "Sao Paulo Time" var timeZone: String { return TimeZone.current.localizedName(for: TimeZone.current.isDaylightSavingTime() ? .daylightSaving : .standard, locale: .current) ?? "" } timeZone // "Brasilia Summer Time"


NSTimeZone *timeZone = [NSTimeZone localTimeZone]; NSString *tzName = [timeZone name];

El nombre será algo así como "Australia / Sydney" o "Europa / Lisboa".

Como parece que solo te importa el continente, eso podría ser todo lo que necesitas.